Visual Studio 中文显示乱码问题

今天在码云上Fork了一个开源工程,编译环境是Visual Studio C++, 由于自己本地平台主要是进行Linux开发,平时文档编码格式都是utf-8的,编译没问题,但运行起来就是乱码,就像下图一样。
Visual Studio 中文显示乱码问题_第1张图片
碰到这个问题,根据经验很确定就是文件编码问题,于是使用工具,将工程文件批量进行转码,由GB2312变换到utf-8。设置完成后标题栏中文正常显示了,但是里面输入文字,例如:

AfxMessageBox(_T("加载Duilib属性文件失败!"));

显示仍然是乱码,于是乎想到了翻阅MSDN, 终于查找了相关资料,Visual Studio 对于UTF-8格式支持不好,在VS2015版本(Visual Studio 2015 Update 2),增加一个编译选项/utf-8,作用就是将源码字符集和执行文件字符集指定为UTF-8。加上这个编译选项后,再重新编译运行,程序正确输出中文,问题解决。

/utf-8 (Set Source and Executable character sets to UTF-8)

总结

中文乱码问题,分析原因在于:

Visual Studio对于不带BOM的UTF-8文件,默认会根据本地locale的设置来决定文件的编码(对于简体中文系统,就是GBK)。因此对于UTF-8 without BOM的代码文件输出中文就是乱码。[^1]

解决方法,分两步:

  1. 使用批量转换工具讲文件编码格式转换为utf-8 格式,这样文件里面中文字符就能正常显示了,不会在编辑起来还显示乱码, 转换工具见我的另一篇文章: 批量转换文件编码;
  2. 编译选项里面加上/utf-8, 这样将执行文件字符集指定为UTF-8, 与源码文件编码方式一样了。

参考文档
[^1] MSVC中C++ UTF8中文编码处理探究
[^2] shell 批量转换文件编码
[^3] /utf-8 (Set Source and Executable character sets to UTF-8)

你可能感兴趣的:(C/C++,编程技巧,Linux)