utf-8无bom编码的源文件中文乱码
MSVC对于UTF-8 without BOM格式支持不好,这个问题由来已久,在VS2015之前的版本一直存在。
在VS2015版本(Visual Studio 2015 Update 2),增加一个编译选项/utf-8
,
该编译选项的作用就是将源码字符集和执行文件字符集指定为UTF-8。增加该编译选项后,再重新编译运行,程序正确输出中文,问题解决。右击工程"属性" -> “C/C++” -> “所有选项” -> “附加选项"中添加”/utf-8"。
或通过cmake中自动设置,参考:CMake学习(4)—— 使用技巧
utf-8中文在控制台显示乱码
在Visual Studio 20xx
中,如果源码文件是UTF8
编码,要打印中文到控制台时,控制台会显示乱码,可以进行以下设置。
- 包含
<Windows.h>
头文件。 - 在
main
函数初始调用SetConsoleOutputCP(CP_UTF8)
设置控制台输出字符集为UTF8
编码。
#include <Windows.h>
int main(int argc, char* argv[])
{
SetConsoleOutputCP(CP_UTF8);
return 0;
}