在写qt网口通信的过程中,遇到中文就乱码。解决方法如下:
1.接收端处理中文乱码代码如下 QByteArray-> QString 中文乱码解决:
#include <QTextCodec>
QByteArray data= tcpSocket->readAll();
QTextCodec *tc = QTextCodec::codecForName("GBK");
QString str = tc->toUnicode(data);//str如果是中文则是中文字符
2.发送端处理中文乱码如下 QString->QByteArray 中文乱码解决:
const QString data = "学而不思则罔"
QTextCodec *tc = QTextCodec::codecForName("GBK");
tcpSocket->write(tc->fromUnicode(data));
在实际处理中我们需要结合 判断string字符串中是否有中文来处理。
3.根据是否有汉字来判断解决方法
处理方法1
QString str;
int nCount = str.count();
bool containChinese = false;
for(int i = 0 ; i < nCount ; i++)
{
QChar cha = str.at(i);
ushort uni = cha.unicode();
if(uni >= 0x4E00 && uni <= 0x9FA5)
{
//这个字符是中文
containChinese = true;
break;
}
}
处理方法2
QString str = "csdn博客论坛";
bool existCh = str.contains(QRegExp("[\\x4e00-\\x9fa5]+"));
if(eixstCh)
{
//存在中文 中文处理方法 直接显示出来
}
else
{
处理非中文 该ascii显示就ascii显示 16进制则16进制显示
}