关于Qt乱码的问题我所遇到的大致有如下几个
1.界面控件显示乱码
2.打开文本乱码
3.接收信息乱码
4.控制台输出乱码
5.打开文件注释乱码
1.乱码的原因
这个博客解释的很详细,也有很多例子去区分:https://www.cnblogs.com/lsgxeva/p/12161743.html
2.过去乱码万金油
过去解决乱码的方式是直接素质三连
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
从Qt5开始只剩下setCodecForLocale这一个了,只是影响Qt对toLocal8Bit相关函数的编码方式
3.现在乱码万金油
//在main.cpp中加入
#include<QTextCodec>
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));//解决汉字乱码问题
将需要显示的中文用QString::fromLocal8Bit包起来
QString::fromLocal8Bit("你想要保存文件嘛?")
4.各种乱码的解决方式
1.界面控件显示乱码:
使用现在乱码万金油可以解决大部分,我是这么解决的,所有的汉字都用GBK存储。
2.打开文本乱码:
//文件与文本流相关联
QTextStream in(file);
//读文件编码方式
in.setCodec("GBK");
ui->textEdit->setText(in.readAll());//读文本
3.接收/发送信息乱码
//《接收》//
//从通信套接字里面取出内容
QByteArray array = tcpSocket->readAll();
QString str = QString::fromLocal8Bit(array.data());
//《发送》//
//获取编辑区内容
QString str = ui->sendEdit->toPlainText();
//兼容中文字符串
QByteArray packet = str.toLocal8Bit();
4.控制台输出乱码
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));//解决汉字乱码问题
5.打开文件注释乱码
这个按照步骤点开菜单栏:工具->选项->文本编辑器->行为->文件编码->默认编码
选择编写这个文件时,作者所使用的编码格式。
5.关于Tr函数编码问题
这个博主解释的很到位:https://www.cnblogs.com/lsgxeva/p/7814072.html