printf打印带中文的字符串不乱码的编译注意事项

MS C编译器

MS C编译器会把源程序转换为当前代码页编码的源程序。

  1. 如果源程序是ANSI(当前代码页936)编码,直接编译;
  2. 如果源程序是不带BOM的UTF-8,则编译的时候需要加-source-charset:UTF-8;
  3. 如果源程序是带BOM的UTF-8、UTF-16LE、UTF-16BE,直接进行编译。

GCC

GCC编译器不执行转换源程序为当前代码页编码的源程序,它假定源程序是UTF-8编码。

1、如果源程序是ANSI(当前代码页936)编码,直接编译;

2、如果源程序是ANSI(当前代码页936)编码但如果有wprintf打印L””的字符串,则需要添加编译选项-finput-charset=gbk;

3、如果源程序是UTF-8,无论带不带BOM,都能正常编译,但打印乱码,需要增加编译选项-fexec-charset=gbk;

4、如果源程序是UTF-16,则如果源程序包含了其它ANSI头文件和库函数,则无法进行编译,若不包含其它ANSI头文件和库函数,则可以通过增加-finput-charset=utf-16le或-finput-charset=utf-16be来编译源文件。

wprintf打印带中文的字符串,需要在源程序中添加setlocale(LC_ALL, "");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值