查看完整版本: [-- QT中文奇怪的问题 --]

QTCN开发网 -> Qt中文处理 -> QT中文奇怪的问题 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

我超爱这里的 2020-07-07 17:16

QT中文奇怪的问题

本人以前用QT的时候,发现正常使用中文,不进行任何处理的话就会出现问题,所以一般都会使用QString::fromLocal8Bit进行处理后再进行展示。
但是这一段时间,电脑因为重做完系统后,下载了QT1.14.0版本,惊奇的发现情况出现变化了,中文字符竟然不需要进行处理就能正常显示,反而常用的处理后的中文字符出现了乱码的情况
  1. qDebug()<<"中文"<<endl;
    qDebug()<<QString::fromUtf8("中文")<<endl;
    qDebug()<<QString::fromLocal8Bit("中文")<<endl;//乱码
    qDebug()<<QString(QStringLiteral("中文").toLocal8Bit());//乱码


    中文

    "中文"

    "涓\uE15F枃"

    "????"
    17:15:27: E:\qtprogram\build-ceshi3-Desktop_Qt_5_14_1_MinGW_64_bit-Debug\ceshi3.exe exited with code 0

由于我对QT的了解也不深刻,对这个问题也是一头雾水,总感觉这个问题会在以后编程的时候会连带着引起其他问题,所以发帖来求助各位大佬


liudianwu 2020-07-07 19:20
qt5.14吧?怎么还有1.14
qt5开始默认就是utf8编码

笑颜 2020-07-07 19:25
1. 首先检查源码文件是什么编码
2. 检查系统默认编码是什么

我超爱这里的 2020-07-08 09:10
liudianwu:qt5.14吧?怎么还有1.14
qt5开始默认就是utf8编码 (2020-07-07 19:20) 

啊,我打错了,想着5.14结果打成了1.14,我之前用的是5.12版本,没改动过QT本身的设置,结果现在新装的5.14版本出现了和之前不一样的情况,感觉怪怪的

我超爱这里的 2020-07-08 09:22
笑颜:1. 首先检查源码文件是什么编码
2. 检查系统默认编码是什么
 (2020-07-07 19:25) 

我在CMD输入chcp得到的是936,这说明系统用的字符集是GB2312。
而我的QT设置基本没动过,设置的默认编码是utf-8,utf-8 BOM设置的是如果编码是UTF-8则添加。
究极奇怪,总觉得不对劲

rpdhunter 2020-07-13 14:08
我超爱这里的:我在CMD输入chcp得到的是936,这说明系统用的字符集是GB2312。
而我的QT设置基本没动过,设置的默认编码是utf-8,utf-8 BOM设置的是如果编码是UTF-8则添加。
究极奇怪,总觉得不对劲[表情] (2020-07-08 09:22) 

我来回答吧,这个和Qt版本没多大关系(前提是Qt5),而是和Qt Creator的设置有关系

楼主之前的Qt Creator设置默认编码(选项->文本编辑器->行为->默认编码)一定是GB2312或者GB18030,在这种设置下,qDebug()<<"中文"<<endl;会输出乱码;

但是,楼主重装了系统又重装了Qt,Qt使用了默认设置编码是utf-8,就出现了上面的现象。

楼主不信,把编码设回GB2312再试试,是不是和原来一样了?

rpdhunter 2020-07-13 14:10
另外,也要看楼主用的是mingw版本还是msvc版本,如果是msvc版本,光设置编码utf-8是没用的,直接输出中文还是会乱码

我超爱这里的 2020-07-20 17:42
rpdhunter:我来回答吧,这个和Qt版本没多大关系(前提是Qt5),而是和Qt Creator的设置有关系
楼主之前的Qt Creator设置默认编码(选项->文本编辑器->行为->默认编码)一定是GB2312或者GB18030,在这种设置下,qDebug()<<"中文"<<endl;会输出乱码;
..... .. (2020-07-13 14:08) 

破案了,大佬简直像福尔摩斯一样让人惊叹,我按照大佬说的改成GB2312后确实出现像以前那样的乱码问题,熟悉的乱码,熟悉的需要用QString::fromLocal8Bit来避免出现乱码

angelus 2020-07-21 09:10
QString::fromLocal8Bit  自从编写跨平台代码后再也不会使用这行代码了,只会明确的都转换为utf8

如果外来的字符,都是先确定来源字符编码模式,然后使用
QByteArray rba    = codec->fromUnicode(data);
加载,然后再转换为uft8代码进行使用,如果需要输出,就再转换为特定编码。


查看完整版本: [-- QT中文奇怪的问题 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled