• 2436阅读
  • 8回复

[讨论]QT中文奇怪的问题 [复制链接]

上一主题 下一主题
 

只看楼主 倒序阅读 楼主  发表于: 2020-07-07
本人以前用QT的时候,发现正常使用中文,不进行任何处理的话就会出现问题,所以一般都会使用QString::fromLocal8Bit进行处理后再进行展示。
但是这一段时间,电脑因为重做完系统后,下载了QT1.14.0版本,惊奇的发现情况出现变化了,中文字符竟然不需要进行处理就能正常显示,反而常用的处理后的中文字符出现了乱码的情况
  1. qDebug()<<"中文"<<endl;
  2. qDebug()<<QString::fromUtf8("中文")<<endl;
  3. qDebug()<<QString::fromLocal8Bit("中文")<<endl;//乱码
  4. qDebug()<<QString(QStringLiteral("中文").toLocal8Bit());//乱码
  5. 中文
  6. "中文"
  7. "涓\uE15F枃"
  8. "????"
  9. 17:15:27: E:\qtprogram\build-ceshi3-Desktop_Qt_5_14_1_MinGW_64_bit-Debug\ceshi3.exe exited with code 0

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

离线liudianwu

只看该作者 1楼 发表于: 2020-07-07
qt5.14吧?怎么还有1.14
qt5开始默认就是utf8编码
欢迎关注微信公众号:Qt实战/Qt入门和进阶(各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发) QQ:517216493  WX:feiyangqingyun  QQ群:751439350
离线笑颜

只看该作者 2楼 发表于: 2020-07-07
1. 首先检查源码文件是什么编码
2. 检查系统默认编码是什么

只看该作者 3楼 发表于: 2020-07-08
回 liudianwu 的帖子
liudianwu:qt5.14吧?怎么还有1.14
qt5开始默认就是utf8编码 (2020-07-07 19:20) 

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

只看该作者 4楼 发表于: 2020-07-08
回 笑颜 的帖子
笑颜:1. 首先检查源码文件是什么编码
2. 检查系统默认编码是什么
 (2020-07-07 19:25) 

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

只看该作者 5楼 发表于: 2020-07-13
回 我超爱这里的 的帖子
我超爱这里的:我在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再试试,是不是和原来一样了?
4条评分好评度+1贡献值+1金钱+10威望+1
我超爱这里的 好评度 +1 太强了 2020-07-20
我超爱这里的 贡献值 +1 太强了 2020-07-20
我超爱这里的 威望 +1 太强了 2020-07-20
我超爱这里的 金钱 +10 太强了 2020-07-20
离线rpdhunter

只看该作者 6楼 发表于: 2020-07-13
另外,也要看楼主用的是mingw版本还是msvc版本,如果是msvc版本,光设置编码utf-8是没用的,直接输出中文还是会乱码

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

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

只看该作者 8楼 发表于: 2020-07-21
QString::fromLocal8Bit  自从编写跨平台代码后再也不会使用这行代码了,只会明确的都转换为utf8

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