2021-04-10
作者:互联网
关于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