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后重新编译执行。

原文地址:https://www.cnblogs.com/djh5520/p/13879885.html