最近在Qt项目中遇到TCP通信接收数据乱码的问题,很是苦恼,经过多次尝试,终于得以解决。
感谢Qt TcpSocket 传递数据乱码显示_qt中socket接受到的客户端数据显示不出来-CSDN博客
彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)_XX風的博客-CSDN博客
1、VS运行中输出的汉字为乱码
在头文件中插入以下一行代码:
#pragma execution_character_set("utf-8");

2、TCP通信接收的数据为乱码
在main.cpp文件中插入以下代码:
- #include <QTextCodec>
-
- //设置中文编码
- #if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
- #if _MSC_VER
- QTextCodec *codec = QTextCodec::codecForName("GBK");
- #else
- QTextCodec *codec = QTextCodec::codecForName("UTF-8");
- #endif
- QTextCodec::setCodecForLocale(codec);
- QTextCodec::setCodecForCStrings(codec);
- QTextCodec::setCodecForTr(codec);
- #else
- QTextCodec *codec = QTextCodec::codecForName("UTF-8");
- QTextCodec::setCodecForLocale(codec);
- #endif
tcp接收数据处添加以下内容:
- #include <QTextCodec>
-
- QByteArray buffer1;
- buffer = tcpSocket_conf->readAll();
- QTextCodec *tc = QTextCodec::codecForName("GBK");
- QString cc = tc->toUnicode(buffer);
-
- qDebug() << buffer;
- qDebug() << cc;
输出:

tcp发送数据添加以下内容:
- QByteArray result_send;
-
- QTextCodec *tc = QTextCodec::codecForName("GBK");
- tcpSocket_conf->write(tc->fromUnicode(result_send));

3、控制台乱码
SetConsoleOutputCP(CP_UTF8);