• 12283阅读
  • 7回复

请教如何通过Socket发送中文字符串 [复制链接]

上一主题 下一主题
离线shrek_mycpp
 
只看楼主 倒序阅读 楼主  发表于: 2009-08-08
各位达达:
    在下做了一个小聊天工具, 建立了一个QTcpSocket连接(是不是有点有点大材小用了, 貌似单位的电脑之间不能进行QUdpSocket通讯, 所以...), 从QTextEdit中获取字符串, 然后通过QTcpSocket发送出去. 当对方收到后, 显示到QTextEdit上的却是乱码.  请问怎么解决??? 相关代码如下:
///// Client Send To Server ///////
    QString sendString = sendTxt->toPlainText();    // get text from QTextEdit "sendTxt"
    QByteArray sendByteArray;
    sendByteArray.append(sendString);
    tcpSocket->write(sendByteArray);

///// Server receive from Client ///////
    QByteArray tempByteArray = tcpSocket->readAll();
    char * tempChar = tempByteArray.data();
    QString tempString = tr(tempChar);
    contextTxt->append(tempString );    // refresh QTextEdit "contextTxt"

注: 已经在两端的main()函数中, 添加了QTextCodec::setCodec(...). 还是不行.      
实在不知道该如何讲中文转换过来. 请指教!!!
离线dbzhang800

只看该作者 1楼 发表于: 2009-08-08
你这个和Socket没关系,只是你没想好如何将字符串序列化而已。

你需要的是,将 QString 转成 QByteArray 或 char* , 然后再将序列化后的QByteArray或 char* 重新转换成 QString 而已。

只要你了解了,其实很简单
你可以将其,转换成utf8,从utf8再转换回来,也可以转成gbk,从gbk再转回来。


比如原始字符串 QString str0, 序列化后 QByteArray  array = str0.toUtf8(),再转换回字符串

    QString str0 = "北京";
    QByteArray  array = str0.toUtf8();
    QString str1 = QString::fromUtf8(array.data());
    qDebug(str0 == str1 ? "true" :"false");

当然,你可以 toLocal8Bit  fromLocal8Bit,等等,反正每种支持中文的编码你都可以用,只要两次编码一致就行
离线shrek_mycpp
只看该作者 2楼 发表于: 2009-08-08
首先 非常感谢楼上的回复!

在网上查了一些有关Utf8的相关内容 才晓得toUtf8, fromUtf8的功能. 现在功能已经实现 就是在发送端对中文进行toUtf8转换 在接收端再进行fromUtf8转换回来 就ok了.  多谢楼上指教!!!

确认一下: 如果没理解错的话 QByteArray就是为了储存QString转换后的UCS编码 方便网络传输用的类型 对吧?
离线santhtony

只看该作者 3楼 发表于: 2009-10-22
不错
-------------> ------->       http://www.likeqt.com
离线quankun
只看该作者 4楼 发表于: 2009-11-21
太谢谢啦。我也的这问题。。现在终于解决了。。。。
离线qujunde

只看该作者 5楼 发表于: 2009-11-28
有所领悟。。。
离线cjinace
只看该作者 6楼 发表于: 2009-12-30
回 1楼(dbzhang800) 的帖子
请问,这种方法,如果我在发送端改变字体颜色,大小,接收端收到的是改变后的字体吗?
离线lzheng
只看该作者 7楼 发表于: 2010-01-18
学习了
快速回复
限100 字节
 
上一个 下一个