标签:10 中文 utf 04 编码 字符集 乱码 2021 QTextCodec
关于qt中的中文乱码问题
首先参考下两篇优秀的博文
一、乱码原因
首先来看下qt中对于QString中构造函数的介绍
上述描述就是我们在代码中常用的中文字符串赋值方法,采用这种赋值方式是很容易出现乱码问题。
QString str(QObject::tr("1中文"));
通过描述可以知道,构造函数将编码串从utf-8转换为utf-16,若中文编码串是以utf-8编码那就不会乱码,简言之就是【执行字符集】是utf-8就没有问题。强调下以下概念:
【源字符集】:.h,.cpp源文件的编码格式。
【执行字符集】:保存在二进制文件中的编码格式。
对于这两种字符集之间的转换是由编译器处理的,g++编译器在编译时源字符集是什么,执行字符集对应就是什么;msvc编译器就比较特殊了,不论源字符集是什么会默认转成LOCAL字符集,例如简体中文windows下,LOCAL字符集是GBK编码,除非通过预编译宏进行设定,改变【执行字符集】。
#if defined(_MSC_VER) && (_MSC_VER >= 1600)
# pragma execution_character_set("utf-8")
#endif
二、 QTextCodec::setCodecForLocale
我们经常看到这个方法的使用,
QTextCodec *codec = QTextCodec::codecForName("gbk");
QTextCodec::setCodecForLocale(codec);
经过测试这个函数影响的是QString::fromLocal8Bit()函数的使用,默认的话同系统字符集保持一致。
QTextCodec可用于编码转换,使用参考如下博文:
QTextCodec编码转换方法
标签:10,中文,utf,04,编码,字符集,乱码,2021,QTextCodec 来源: https://blog.csdn.net/weixin_39857255/article/details/115575285
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。