• 1764阅读
  • 4回复

[提问]请教一个关于TCP传送中文乱码的问题 [复制链接]

上一主题 下一主题
离线clickto
 

只看楼主 倒序阅读 楼主  发表于: 2020-06-10
我有一段程序,通过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
离线笑颜

只看该作者 1楼 发表于: 2020-06-10
编码问题啊 最好解决的办法是toUtf8,然后fromUtf8,loca8编码在不同系统,不同设置的情况下,可能不一样的
离线dbzhang800

只看该作者 2楼 发表于: 2020-06-10
这个和socket没什么关系啊

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

QString::fromLocal8Bit(ba)

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

只看该作者 3楼 发表于: 2020-06-10
用utf8来统一转当然是没什么问题的,就是我现在采用的方案。
我想问的是,QString::fromLocal8Bit这个函数到底有什么问题?两个客户端的编码设置什么的都是一样的,那么是什么导致了这种不一样的现象?
在线20091001753

只看该作者 4楼 发表于: 2020-06-10
中文 win 系统默认的本地编码是 GBK
linux系统默认的本地编码是 UTF8

所以最简单的办法就是,不用管平台本地编码是什么,你的客户端与服务端,都采用 UTF8 收发。
(づ ̄ 3 ̄)づ
快速回复
限100 字节
 
上一个 下一个