解决Qt Tcp通信传输中文字符乱码问题

解决Qt Tcp通信传输中文字符乱码问题,第1张

用Qt编写的窗口与Unity3D通过Tcp进行通信,通信过程中难免发送一些中文字符,下面简单介绍一下:

Qt版本:5.9.9 , 建立TcpServer

unity3D 建立TcpSocket  , 通过固定端口进行通信

Qt与Unity3D通信发生中文乱码问题,主要在以下方面:

1. 在Qt main.cpp 中添加以下设置

QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"))

GBK要与Unity3D中的保持一致,GB2312也是可以的,UTF-8不可以。

2. Qt发送数据

mCommondSocket->write(command.toLocal8Bit())

发送的字符串直接转化为QByteArray发送,转化为char*发送,是会乱码的。

3.示例截图

通过Qt发送一个视频地址,在Unity3D上进行视频播放,也会打印出接收的数据。

videoPath代表视频地址:前面的BG代表标识;MuTcpSocketObject是tcp通信.

好了,都已经介绍完毕,希望能帮到大家。

在main()函数指定使用的字符编码:

#include <QTextCodec>

QTextCodec *codec = QTextCodec::codecForName("GBK")//情况1

QTextCodec::setCodecForTr(codec)QTextCodec::setCodecForLocale(codec)QTextCodec::setCodecForCStrings(codec) 或 QTextCodec *codec = QTextCodec::codecForName("UTF-8")//情况2

QTextCodec::setCodecForTr(codec)

QTextCodec::setCodecForLocale(codec)

QTextCodec::setCodecForCStrings(codec)

(1)、中文编码一律使用QString::fromLocal8Bit()接口。

原因:需要支持QT4版本。QStringLiteral()方法也可取,但是它只支持QT5版本,如果没有版本问题,可以使用。

(2)、CPP等文件编码一律使用UTF8—BOM格式。

原因1:UTF8-无BOM在使用window编译器cl中编译会失败,当然除非你Windows中使用QT的Mingw版本编译开发。

原因2:不使用GBK的文件编码是为了更容易的兼容到linux版本与windows中,否则你需要改QtCreate的编码环境与linux的系统字符环境。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10809036.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-11
下一篇2023-05-11

发表评论

登录后才能评论

评论列表(0条)

    保存