Qt MSVC编译器中文字符串编译报错及乱码问题

摘要:
根本原因是Scheme 2没有真正让msvc编译器使用UTF-8编码。
一、使用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

Qt MSVC编译器中文字符串编译报错及乱码问题第1张

 解决方案一:修改.pro文件,在.pro文件中添加以下设置,然后qmake重新编译即可通过

win32-msvc*: {
    QMAKE_CFLAGS *= /utf-8
    QMAKE_CXXFLAGS *= /utf-8
}

Qt MSVC编译器中文字符串编译报错及乱码问题第2张

 Qt MSVC编译器中文字符串编译报错及乱码问题第3张

 解决方案二:将源代码文件的编码转换成UTF-8-BOM

 1.先来查看一下Qt Creator源代码文件原来的编码及编译结果

Qt MSVC编译器中文字符串编译报错及乱码问题第4张

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

 Qt MSVC编译器中文字符串编译报错及乱码问题第5张

Qt MSVC编译器中文字符串编译报错及乱码问题第6张

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

Qt MSVC编译器中文字符串编译报错及乱码问题第7张

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

Qt MSVC编译器中文字符串编译报错及乱码问题第8张

二、中文显示乱码问题解决(前提是已解决中文字符编译报错问题)

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

方案1:将代码种所有的中文字符串用QStringLiteral宏包裹:

Qt MSVC编译器中文字符串编译报错及乱码问题第9张

方案2:在含有中文字符串的源代码文件的第一行(注意是第1行,即文件最开始位置)添加以下MSVC的预编译指令,让msvc支持utf-8(Linux下自动忽略)

#if _MSC_VER >=1600
#pragma execution_character_set("utf-8")
#endif
或者直接一句
#pragma execution_character_set("utf-8")

Qt MSVC编译器中文字符串编译报错及乱码问题第10张

三、最简单同时解决中文字符编译报错、显示乱码的方式

  即最开始的方案1,在.pro文件加入设置,qmake后重新编译执行。

Qt MSVC编译器中文字符串编译报错及乱码问题第11张

免责声明:文章转载自《Qt MSVC编译器中文字符串编译报错及乱码问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Uni-app v-if的写法SqlSugar下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【改】utf-8 的去掉BOM的方法

最近在测试中发现,linux系统中导出的文件,有记事本打开另存为或者保存后,再次导入进linux系统,发现失败了,对比文件内容,没发现区别,打开二进制文件对比发现,文件头部多了三个字符:EF BB BF。 通过网络查找答案知,windows记事本等采用utf8 BOM格式,而Linux下采用UTF-8无BOM格式,上述三个字符即BOM。 去掉BOM方法:...

[转]chrome浏览器中 F12 功能的简单介绍

本文转自:https://www.cnblogs.com/zhuzhubaoya/p/9758648.html chrome浏览器中 F12 功能的简单介绍     由于F12是前端开发人员的利器,所以我自己也在不断摸索中,查看一些博客和资料后,自己总结了一下来帮助自己理解和记忆,也希望能帮到有需要的小伙伴,嘿嘿! 首先介绍Chrome开发者工具中,...

chrom浏览器-F2使用方法一

   由于F12是前端开发人员的利器,所以我自己也在不断摸索中,查看一些博客和资料后,自己总结了一下来帮助自己理解和记忆,也希望能帮到有需要的小伙伴,嘿嘿! 首先介绍Chrome开发者工具中,调试时使用最多的三个功能页面是:元素(ELements)、控制台(Console)、源代码(Sources),此外还有网络(Network)等。    元素(Elem...

mysql-5.6.27源码安装及错误解决办法

环境:centos6.5.x86_64 wgethttp://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.27.tar.gz yum install -y cmake 当然也可以自己下载源码包安装,为方便就Yum安装了 useradd -s /sbin/nologin mysql tar zxvf mysql-...

arcengine 开发经典帖 【强烈推荐仔细研读】

转自原文 arcengine 开发经典帖 使用ArcGIS Engine 开发自定义GIS应用:第一部分:使用ArcGIS Engine 发布自定义GIS应用软件-全面了解ArcGIS Engine的产品。第二部分:ArcEngine9.2的新特性及变化、(续)--类对比及变化、(续)--(代码转换插件)、(续)--ArcEngine新命令,工具、菜单...

Postgresql数据库的一些字符串操作函数(转)

今天做项目遇到客户反映了一个麻烦的事情,有一些数据存在,但就是在程序中搜索不出来,后来分析,发现问题为数据前面有几个空白字符,后来用SQL 查询了一下,发现八九个数据表中,数千万条数据中有将近三百万条数据存在相同的问题,本想着在查询时添加匹配符'%',后来试运行了一下,发现不可行,因 为尚有很多其它页面存在类似的搜索问题,并且这样会极大地影响到查询的速度,...