Qt MSVC编译器中文字符串编译报错及乱码问题
一、使用MSVC编译器编译时字符串含有中文,编译报错
首先明白为什么会报错:Qt Creator IDE生成的源代码文件默认采用的编码是UTF-8(可以使用类似Notepad++这种编辑器打开查看文件编码),但是MSVC编译器可以支持源代码文件的编码为UTF-8-BOM(即带BOM格式的),即默认不支持UTF-8。所以解决方案就有2个:一是让MSVC支持UTF-8,也就是下面方案1;二是将Qt Creator生成的源代码文件的编码转换成UTF-8-BOM即下面的方案2。

解决方案一:修改.pro文件,在.pro文件中添加以下设置,然后qmake重新编译即可通过
win32-msvc*: {
QMAKE_CFLAGS *= /utf-8
QMAKE_CXXFLAGS *= /utf-8
}


解决方案二:将源代码文件的编码转换成UTF-8-BOM
1.先来查看一下Qt Creator源代码文件原来的编码及编译结果

2.使用Notepad++或其他编辑器将源代码文件转成UTF-8-BOM


3.重新qmake后,编译并运行结果如下:

4.Qt Creator默认编码设置(菜单栏“工具”-“选项”)

二、中文显示乱码问题解决(前提是已解决中文字符编译报错问题)
上面的解决中文字符串编译报错方案2虽然解决了编译问题,但是最后还是发现又问题,即中文显示乱码。其本质原因还是因为方案2并没有真正让msvc编译器使用UTF-8编码导致。解决方案同样有2种:
方案1:将代码种所有的中文字符串用QStringLiteral宏包裹:

方案2:在含有中文字符串的源代码文件的第一行(注意是第1行,即文件最开始位置)添加以下MSVC的预编译指令,让msvc支持utf-8(Linux下自动忽略)
#if _MSC_VER >=1600
#pragma execution_character_set("utf-8")
#endif
或者直接一句
#pragma execution_character_set("utf-8")

三、最简单同时解决中文字符编译报错、显示乱码的方式
即最开始的方案1,在.pro文件加入设置,qmake后重新编译执行。


浙公网安备 33010602011771号