笔者看了关于QT乱码的文章,发现都没有讲到本质上,所以斗胆自己写一写自己的理解。
如果你使用的是QT5以上的QT Creator编译器,恭喜你,你几乎不会遇到中文乱码这个问题。
如果你使用的是VS + QT的方式,那应该会遇到的这个问题。
QT Creator新建一个cpp文件,默认的文件编码是UTF-8 (如果对文件编码不熟悉的人,可以下一个UltraEdit,切换下编码保存,然后在十六进制模式下观察)
QString内部存储默认的UTF-16,也就VS中的宽字符方式;
在QT Creator写下 ui->label->SetText("你好");
非常好,没有出现乱码,但是这是编译器默认帮你做了转换,也就是把UTF8字符转成UTF16,所以你感觉好像你啥都没做,字符串也没乱!
实际上面的代码等同于 ui->label->SetText(QString::fromUtf8("你好"));
在VS创建一个QT文件,默认的编码是GBK-936,
如果你还这些写的话ui->label->SetText("你好"); 你会发现乱码了,也就是说编译的默认转换出现了问题!
1.正确的写法是ui->label->SetText(QString::fromLocal8Bit("你好"));
fromLocal8Bit 顾名思义就是根据你本地系统的语言编码转到UTF16,!
2.或者使用宏 ui->label->SetText(QStringLiteral("你好"));
3.或者干脆告诉编译器,在cpp文件头部加上#pragma execution_character_set("utf-8")
ui->label->SetText("你好");
相关文章:http://blog.csdn.net/dbzhang800/article/details/7542672