一、使用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")