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[]字符串提取中文
- 遇到了这样一个中文乱码的问题
- 今天遇到一个问题,获取properties配置文件中的中文时会出现乱码的情况
- Qt中文乱码问题(比较清楚,同一个二进制串被解释成不同的语言)
- jsp中文乱码一个超粗心的问题 但我犯了两次???
- 解决了QT网络编程中的中文乱码问题
- 【Qt移植到linux】问题 qt界面无法输入中文,中文不显示,乱码等问题
- 在url中传递汉字到另外一个页面后,出现中文乱码的问题解决
- 日常遇到的各种中文乱码问题(不断更新以备忘)
- 在MySQL中插入数据时遇到的中文乱码问题
- Qt写c++控制台中文乱码问题
- 个人遇到的QT中文编码问题
- 项目中遇到的中文乱码问题
- Unity 中关于中文乱码以及压缩解压遇到的问题解决方法
- 自己编译QT时遇到的中文显示问题整理
- Qt-中文乱码问题
- QT-解决中文显示乱码问题
- Java 简单解决springmvc获取properties文件里面中文内容出现论码问题(我遇到的问题是数据提交检验时返回的错误提示出现乱码)
- Qt中文乱码问题
- QT之解决按钮显示中文乱码问题
- 关于ubuntu10.04触摸板不能禁用和gedit文本编辑器中文乱码问题的一个解方案 转自:http://blog.csdn.net/luodayuan/archive/2010/05/23/5617615.aspx