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

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

于是开始检查代码,借此机会理了一遍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[]字符串提取中文

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值