您的位置:首页 > 编程语言 > Qt开发

Qt5.8.0遇到的一个中文乱码问题

2018-12-27 22:11 190 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_32040321/article/details/85309056

维护公司代码时看到一个工具出现了如下的乱码:

于是开始检查代码,借此机会理了一遍char *、QString、GB18030、UTF8之间的关系。

这里出现乱码的原因是:由SDK接口得到一个包含中文的char[]字符串:

char byName[NAME_LEN];

这个字符串存储的中文为GB18030格式保存,对于Qt5.8.0来说,默认设置本地字符编码为UTF8、默认设置QString编码为UTF8,如果直接使用:

QString str_trans=QString::fromLocal8Bit(byName);
qDebug()<<str_trans;

实际的操作就是从本地字符编码UTF8格式转换为QString编码UTF8,字符串没有转换,出现乱码。

要解决这个问题需要设置一下本地字符编码,在QString str_trans=QString::fromLocal8Bit(byName);之前加上:

QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB18030"));

再输出就能正常显示中文了,实际的操作为从本地字符编码GB18030转换为QString编码UTF8。

 

然而这还没完,由于其他地方的char[]存储的中文是UTF8格式的,也用到了QString::fromLocal8Bit(),这下的实际操作还是从本地字符编码GB18030转换为QString编码UTF8,这样就把正常的UTF8转成了乱码。

解决方法为重新设一遍本地编码格式,总结起来代码如下:

char byName[NAME_LEN];

QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB18030"));//需要从GB18030编码的char[]字符串提取中文

QString str_trans=QString::fromLocal8Bit(byName);

...

QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF8"));//不再需要从GB18030编码的char[]字符串提取中文

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: