在Windows环境下编译:
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打印带中文的字符串,需要在源程序中wprintf之前添加setlocale(LC_ALL, "");
标签:源文件,charset,UTF,ANSI,printf,乱码,编译,注意事项,源程序 From: https://www.cnblogs.com/binaryhead/p/18520839