1、QT控件的相关函数,使用QString格式的数据是可以正常显示的,例如下面示例,而前提是用正确的函数把括号里的“你好”转换成QString类型。
ui->lineEdit->setText(QString::fromUtf8("你好"))
QString str=QString::fromLocal8Bit("你好");
setWindowTitle(str);
2、 “你好”的编码格式与local字符集编码格式一致,Windows系统默认的local编码格式是GBK,Ubuntu默认是utf-8(注:我自己是windows,在头文件里加上
#pragma execution_character_set("utf-8") 可以将其编译为utf-8格式,处理时就要当做utf-8格式对待。
3、两个函数的含义:
①、因为我的windows默认local是GBK,所以QString::fromLocal8Bit("你好")是将“你好”当做GBK格式转为QString的Unicode类型,不在头文件插入#pragma execution_character_set("utf-8")时确实是GBK格式,所以不会乱码。但插入之后需要视作utf-8,这种情况下会出现乱码。
②、QString::fromUtf8("你好")则无视local编码类型,直接视作utf-8格式进行转换,当其格式确为utf-8时,使用正常无乱码。
4、利用如下代码可以将local编码格式转换为utf-8,使用时需要引用头文件QTextCodec。改变local编码格式后,使用fromLocal8Bit和toLocal8Bit这样的函数需要谨慎判断,但不影响fromUtf8和toUtf8的使用。
QTextCodec *codec = QTextCodec::codecForName("UTF-8");//或者"GBK",不分大小写
QTextCodec::setCodecForLocale(codec);
5、(以我的Qt5.12.0为例)使用MSVC编译器时,在头文件加入
# pragma execution_character_set("utf-8")
总是没问题的,如若出现中文乱码,只需检查函数的选用是否正确。
6、利用Qt写串口项目时,若需对收到的字符串信息进行处理(比如转换成QString类型时),字符串的编码类型由发送端决定。
7、Qt Creator里工具->选项->文本编辑器->行为->文件编码中的设置,不仅会影响打开文件时的显示格式,在这个设置下进行文件修改保存,也会将源文件的编码格式修改为相同设置。