查看完整版本: [-- 请教一个关于TCP传送中文乱码的问题 --]

QTCN开发网 -> Qt基础编程 -> 请教一个关于TCP传送中文乱码的问题 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

clickto 2020-06-10 11:38

请教一个关于TCP传送中文乱码的问题

我有一段程序,通过QTcpSocket传递文本,包含中文
QByteArray ba = str.toLocal8Bit();
socket->write(ba);
客户端程序A在接受的时候,
QByteArray ba = socket->readAll();
QString str = QString::fromLocal8Bit(ba);
嗯,没有问题,中文正常显示。
然后,我将客户端程序A代码完全复制到另一个客户端程序程序B的时候,发现中文乱码了。
我打印了两个客户端程序的接受内容,在QByteArray ba = socket->readAll();这一句执行完成之后,两个客户端程序的ba都是一样的,但是在QString str = QString::fromLocal8Bit(ba);这句执行完后,两个str就不一样的。诡异啊!
开发平台是Win7  + Qt5.11.2

笑颜 2020-06-10 13:25
编码问题啊 最好解决的办法是toUtf8,然后fromUtf8,loca8编码在不同系统,不同设置的情况下,可能不一样的

dbzhang800 2020-06-10 13:54
这个和socket没什么关系啊

你就是说,同一个字节流ba。在不同的程序下,下面语句的结果不同,是吧?

QString::fromLocal8Bit(ba)

两个问题:
1. ba是什么编码的字节流
2. 两个客户端的 codecForLocale 分别用的什么

clickto 2020-06-10 14:41
用utf8来统一转当然是没什么问题的,就是我现在采用的方案。
我想问的是,QString::fromLocal8Bit这个函数到底有什么问题?两个客户端的编码设置什么的都是一样的,那么是什么导致了这种不一样的现象?

20091001753 2020-06-10 15:36
中文 win 系统默认的本地编码是 GBK
linux系统默认的本地编码是 UTF8

所以最简单的办法就是,不用管平台本地编码是什么,你的客户端与服务端,都采用 UTF8 收发。


查看完整版本: [-- 请教一个关于TCP传送中文乱码的问题 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled