一、代码里中文乱码
代码里的中文字符串,例如:
QString str_test="看看会不会乱码123!!!";
QT在windows上一般用MSVC编译,但是MSVC文本编码采用GB2312或GBK编码,所以可能出现乱码,可以在.c和.h文件开头添加如下代码,明确告诉MSVC字符串是utf-8的编码
#if _MSC_VER >=1600
#pragma execution_character_set("utf-8")
#endif
同时,源文件也要确定保存成带BOM的UTF-8编码,修改选项后,.c和.h随便改动下再保存,就能变成成UTF-8的文件了。
最后测试一下,看看有没有问题。
二、串口、tcp收发中文乱码
在实际开发中,需要读写设备,例如串口、Socket等等,这时又会有中文乱码的问题,因为windows系统是GB2312或GBK编码,而QString是unicode编码,所以发送和接收的时候要多一步,toLocal8Bit()或fromLocal8Bit()进行编码转换。
以Socket为例:
//TCPSocket发送
QString data = ui->txt_server_send->toPlainText();//获取文本框字符串
QByteArray ba= data.toLocal8Bit();//转成本地编码
tcpsocket->write(ba);//发送
//TCPSocket接收
QByteArray ba = tcpsocket->readAll();//获取客户端发来的数据
QString data=QString::fromLocal8Bit(ba);//从本地编码转成Unicode
ui->textEditRead->append(data);//显示到文本框
串口也是同理。