吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3271|回复: 3
收起左侧

[其他转载] QT5.13+VC2015彻底解决编译错误和中文乱码问题

  [复制链接]
xouou 发表于 2019-12-14 11:03
本帖最后由 xouou 于 2019-12-14 11:20 编辑

最近使用QT5.13+VC2015遇到编译错误,和中文乱码问题

网上搜了很多方法, 没发现彻底解决的,  
有的人说转换文本编码 , 跨平台再转回去? 这要怎么发布?
还有的说一个个添加#pragma指令, 文件一多改来改去咋办,这不现实
遂做了很多实验最终解决,分享给小伙伴们.

这个问题只是在用vc编译时才有, 用minGW是没有,  为何要用vc?
因为vc支持WebEngine

linux下是没有utf-8的bom头的, 因为utf8没有字节序问题,也就不需要bom头,并且这样可以兼容ASCii码 ,
而vc默认是使用当前系统的编码(local code == GBK), 它和UTF8就冲突了,
因此, 要多一个所谓的BOM头来识别UTF8,不然vc还以为它是gbk呢


实验过程:

1.如果编码是utf-8无bom, 在pro中的添加的是
msvc:QMAKE_CXXFLAGS += -source-charset:utf-8
则编译通过, 运行时界面乱码

此时若中文字符串用u8修饰,
QObject::tr(u8"label:我是个窗口")
则编译通,运行没有乱码!

2.如果编码是utf-8无bom,在pro中的添加的是
msvc:QMAKE_CXXFLAGS += -execution-charset:utf-8
则没有效果, 编译错误, C2001; C2146 ; C2143
此时若中文字符串用u8修饰,
QObject::tr(u8"label:我是个窗口")
依然编译错误!

3.如果编码是utf-8无bom,在pro中的添加的是
msvc:QMAKE_CXXFLAGS += -execution-charset:utf-8
msvc:QMAKE_CXXFLAGS += -source-charset:utf-8
则编译通过,且运行时中文正常

4.如果编码是utf-8无bom, pro无添加,用u8修饰没效果,编译错误

5.如果编码是utf-8+bom, 在pro中无添加
则编译能通过,但运行时中文乱码

6.如果编码是utf-8+bom, 在pro中无添加,
但中文字符用u8前缀修饰,QObject::tr(u8"label:我是个窗口")
则编译能通过,运行中文没有乱码.ok
u8虽然起到了效果, 但只能局部使用, 文件太多的话就很难一个个修改了.

7.如果编码是utf-8+bom, 在pro中添加,
msvc:QMAKE_CXXFLAGS += -source-charset:utf-8
则编译能通过,但运行时中文乱码
这个就等于是第5条, 既然有bom那么vc能识别出这个源文件是utf8,

所以在pro再重复指定一次是多余的,并没有指定执行字符集.



7.如果编码是utf-8+bom, 在pro中添加,
msvc:QMAKE_CXXFLAGS += -execution-charset:utf-8
则编译能通过, 执行也无乱码

综上所述:
在用vc编译器时对于没有bom头的utf-8文本编译出错,只要源文件中对字符串加utf8修饰是没用的(修饰符就是u8""形式),
网上有说在源文件加#pragma execution_character_set("utf-8")有用吗?
明显是没用的,编译都通不过,还怎么执行.

msvc:QMAKE_CXXFLAGS += -execution-charset:utf-8  这条是让程序执行时使用utf-8字符集
msvc:QMAKE_CXXFLAGS += -source-charset:utf-8     这条是告诉vc编译器识别源文件编码类型是utf-8
u8修饰符是让程序执行时使用utf-8字符集(显然这种方法只适合少量文本修改,不通用,兼容性差)


总结:
推荐在pro中添加以下3条指令,不管带不带bom都能解决常见的编码问题
即彻底解决C4819警告,C2001错误而不需要转换编码,不需要修改源码!!!

msvc:QMAKE_CXXFLAGS += -execution-charset:utf-8
msvc:QMAKE_CXXFLAGS += -source-charset:utf-8
QMAKE_CXXFLAGS_WARN_ON += -wd4819




截图表示下,都是手打,不是转载(同我的博客)
2019-12-14_111742.png

免费评分

参与人数 2吾爱币 +4 热心值 +2 收起 理由
likoaong + 1 + 1 谢谢@Thanks!
苏紫方璇 + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

mmomm 发表于 2019-12-14 12:02
学习了,大神牛逼!

免费评分

参与人数 1热心值 +1 收起 理由
xouou + 1 菜鸟笔记,希望对新人有帮助

查看全部评分

作死小王子 发表于 2019-12-14 12:10
dmxayjn 发表于 2019-12-14 13:32
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 09:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表