• 14047阅读
  • 3回复

[提问]【提问】请问在网络传输中,中文变成乱码,如何解决 [复制链接]

上一主题 下一主题
离线marship
 
只看楼主 倒序阅读 楼主  发表于: 2006-03-07
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —
在用udp进行传输前,我是用QString保存数据,传输时把QString append到QByteArray,发到对方后,收到的数据无法转换回来,中文全变成了????,英文正常,请问应该怎么解决?谢谢!
XChinux,我已经参考了你的这篇文章http://www.qtcn.org/bbs/read.php?tid=2540,现在已经试了一个多小时了,无论先转换成什么,uft8,ascii,latin,local8bit什么的,再在收方转换都不成,真不知道该怎么做了。
离线XChinux

只看该作者 1楼 发表于: 2006-03-07
网络传输?不知道我以前写自动HTTP POST数据的方法对你有没有帮助:
说明:strName, strID, strContact, strPhont都是Unicode的汉字或数字字符串;
Post出去前要把它转化成类似于下面的Base64编码形式:
http://www.baidu.com/s?wd=%D6%D0%B9%FA&cl=3
这样的形式,中间的"wd=%D6%D0%B9%FA"实际上就是"wd=中国".
下面的代码中关键的是红色的部分:QUrl::toPercentEncoding()
而里面的Utf8_To_GB()函数,则是你上面提到的我以前发帖子说的GB和UTF8汉字编码互相转换的例子。接收到后解码,则使用下面的函数
QString QUrl::fromPercentEncoding ( const QByteArray & input )

QString strName = GenName();
    QString strID = GenPID(LineEditName->text());
    QString strContact = GenContact();
    QString strPhone = GenPhone();
             
      QString data = "name=" + QUrl::toPercentEncoding(Utf8_To_GB(strName)) + "&shengfenzhenghao=" + strID + "&content=" + strID + "&phone=" + strPhone + "&idhao=81&website=&email=&button=" + QUrl::toPercentEncoding(Utf8_To_GB(QString::fromLocal8Bit("投票")));


在你的程序中,如果汉字需要GB编码的话,就使用Utf8_To_GB()函数把它转换过来,如果使用的是Unicode的话,不需要使用Utf8_To_GB()函数
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线marship
只看该作者 2楼 发表于: 2006-03-07
谢谢,刚刚看过那篇文章,我现在在发送时使用
QTextCodec *codec = QTextCodec::codecForName("utf8");
QByteArray data = codec->fromUnicode(msgContent);
将msgContent转换成QByteArray,在接收时使用
QTextCodec *codec = QTextCodec::codecForName("utf8");
      QString a;
      a = codec->toUnicode(listPart.at(2));
将QByteArray转换成QString,现在已经可以正常显示中文了,谢谢!
离线5706046

只看该作者 3楼 发表于: 2009-07-08
顶一个,不错,
快速回复
限100 字节
 
上一个 下一个