QT中文乱码的本质

笔者看了关于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



猜你喜欢

转载自blog.csdn.net/tajon1226/article/details/78512682
今日推荐