
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的系统字符环境。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)