QT使用QTcpSocket和QTcpServer通信是出现乱码的问题

原创 2015年11月19日 22:08:06

在使用QTcpSocket和QTcpSever出现乱码的问题,从根本上来说是文本的编码的问题,如果发送端的数据使用的是一种文本编码方式,而接收端没有使用相应的文本解码方式来解释发送过来的数据,那么就会出现乱码,只要保证发送端文本的编码方式和接收端的一致,就可以解决乱码的问题


使用QTcpSocket的write发送数据的时候,需要的类型是char*,或是QByteArray类型,而我们的字符串使用的是QString来保存,因此需要转换为相应的形式,QString提供了丰富的方法,可以转换成不同的类型,上面已经说了,只要保证发送端和接收端使用相同的文本编码方式,就可以保证不出现乱码,现在我们就来看看。


首先我们使用QString的toStdString转换为string,在调用string的data方法,就可以获得char*类型,在接收端,我们使用readAll读取接收到的所有数据,该函数返回QByteArray类型,使用toStdString就可以获得string类型,使用QString的fromStdString方法,就可以将string的数据复制到QString用于显示。

发送端

void QClient::SendButton(bool b)
{
	Q_ASSERT(m_pSocket);
	if(m_pSocket->state()&QAbstractSocket::ConnectedState)
	{
		QString strContent=ui.textEdit->toPlainText();
		m_pSocket->write(strContent.toStdString().data());
	}
}
接收端

void QServer::readyRead()
{
	QString strContent=ui.textEdit->toPlainText();
	ui.textEdit->setText(strContent+"\n"+QString::fromStdString(m_pClientSocket->readAll().toStdString()));
}


然后,我们不使用这种方式,还是那句话,发送端的文本编码方式和接收端的一致,就可以不会有乱码,现在我们使用另外一种方式。

发送端

void QClient::SendButton(bool b)
{
	Q_ASSERT(m_pSocket);
	if(m_pSocket->state()&QAbstractSocket::ConnectedState)
	{
		QString strContent=ui.textEdit->toPlainText();
		m_pSocket->write(strContent.toLocal8Bit());
	}
}
接收端

void QServer::readyRead()
{
	QString strContent=ui.textEdit->toPlainText();
	ui.textEdit->setText(strContent+"\n"+QString::fromLocal8Bit(m_pClientSocket->readAll()));
}
来看效果


可以看出,仍然没有出现乱码。使用utf-8,utf16等等,我就不在一一举例了,道理也很简单,发送的数据是一些字节,例如,“我”字,使用utf-8编码是0xAB,如果接收的数据接收到的也是0xAB,但是0xAB在utf-8中对应的才是我字,使用别的编码,就可能是别的字了,如果接收端,使用utf-8来解释,就能正确将0xAB解释为"我"字,当然,这里只是举例,“我”字实际用utf-8编码是什么我不知道,呵呵。

相关文章推荐

QT中socket通信中文乱码问题(get√)

Qt version:5.2 download了一份4.8的代码下来研究这个tcp通信。 结果挺萌的,QTextCodec中各种方法过时和被抛弃; 编译都通不过。 将有关编码的代码全部删除后,...

QTcpSocket通信乱码解决方法

在QTcpSocket中通信会出现乱码的情况: 首先不是由于自己设置编码的问题.....在main中加入 QTextCodec *codec = QTextCodec::codecForNa...

qtcpsocket调用write和read函数写数据乱码问题解决方法

参考以下博客QTcpSocket通信乱码解决方法 http://blog.csdn.net/zouhao619/article/details/7100752 qtcpsocket写中...

socket通信中收到信息乱码

如题, 服务器端是已经写好的,c#,用的字符集是Encoding("gb2312"),发送的是string。 qt端用qsting来接收,    QString data;  data+...
  • ykm0722
  • ykm0722
  • 2011年12月14日 22:14
  • 1295

QT 使用QTcpServer QTcpSocket 建立TCP服务器端 和 客户端

1。  如图客户端连接server后,server发送“hello tcp“ 给客户端   2. 实例代码 -----------------------------------  serv...

Qt之QTcpServer/QTcpSocket简单收发信息(1)

用QT包装好的东西做socket类东西,我只能说啥这么简单呢。 waitForConnected() 等待链接的建立 waitForReadyRead() 等待新数据的到来 waitForByt...

Qt下应用QTcpServer与QTcpSocket实现Tcp控制

很多情形下,我们在应用程序的最外层都使用TCP作为可靠控制,下面,我就总结一下我在项目中使用QTcpServer与QTcpSocket的一些心得和体会。     服务端TCP程序可以利用QTcpSe...

Qt之QTcpServer/QTcpSocket简单收发信息(1)

用QT包装好的东西做socket类东西,我只能说啥这么简单呢。 waitForConnected() 等待链接的建立 waitForReadyRead() 等待新数据的到来 waitForB...

QT类似于QQ的即时聊天程序用开发QTcpServer,QTcpSocket简单开发

本文是博主,原创,如果转载需说明是从这篇文章转载,并附上这篇文章的地址。...

qt4 tcp QTcpSocket QTcpServer 传输数据

四十七、Qt网络(七)TCP(一) TCP即Transmission Control Protocol,传输控制协议。与UDP不同,它是面向连接和数据流的可靠传输协议。也就是说,它能使一台计算机上的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:QT使用QTcpSocket和QTcpServer通信是出现乱码的问题
举报原因:
原因补充:

(最多只允许输入30个字)