• 8382阅读
  • 7回复

[提问]再问大家,中文存入 QByteArray里乱码的问题 [复制链接]

上一主题 下一主题
离线pywepe
 
只看楼主 倒序阅读 楼主  发表于: 2009-12-23
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —


上代码

    QByteArray buf;
    QDataStream write(&buf,QIODevice::WriteOnly);
    write<<QString("地方政府");

    QDataStream out(&buf,QIODevice::ReadOnly);
    QString p;
    out>>p;
    qDebug()<<p;


打印出来 是乱码

这个问题怎么解决?
离线dbzhang800

只看该作者 1楼 发表于: 2009-12-23
先不要考虑QByteArray,这个字符串初始化可能就已经出问题了  
QString("地方政府")
离线dbzhang800

只看该作者 2楼 发表于: 2009-12-24
估计楼主这几天也快被折磨疯了。但其他人也爱莫能助,因为楼主问题一直没问到点子上。

比如这个楼主这个问题,其实 QByteArray 和 QDataStream 应该都是正确的
(你读出来的字符串p和你写进去的字符串应该是相同的)。

你应该搞清楚这个:
  1. QString("地方政府");


不妨看看QString的manual,你这个调用哪一个构造函数?

  1. QString::QString ( const char * str )

(然后如果你看过这个构造函数的说明,会发现上面已经说的很详细了。)

我们继续,假定你对汉字编码有些了解。可以知道
“地方政府” 这四个汉字,gbk编码是
  1. "\xb5\xd8\xb7\xbd\xd5\xfe\xb8\xae"

如果你是在windows下,那么你写的其实是就是
  1. QString("\xb5\xd8\xb7\xbd\xd5\xfe\xb8\xae");


如果你的源文件不是gbk编码,而是utf8编码,那么,你写的就是
  1. QString("\xe5\x9c\xb0\xe6\x96\xb9\xe6\x94\xbf\xe5\xba\x9c");


现在问题就出来了,QString内部用的unicode编码,需要把 const char *str 转成unicode ,那么需要知道
你这串const char *str 是什么编码。如果你不告诉Qt你用的什么编码,Qt默认是ANSI编码。
这显然不是你需要的,生成的QString也会不是你需要的。

如果你确实需要在代码中写中文,可以这么写:(不过代码中有中文不是好习惯)
QString::fromUtf8(“地方政府”)          如果你用的linux
QString::fromLocal8Bit(“地方政府”). 如果你用的windows
QString::fromUtf8("\xe5\x9c\xb0\xe6\x96\xb9\xe6\x94\xbf\xe5\xba\x9c"); 如果你要跨平台


其他不多说了,说多了楼主也不一定感兴趣
离线benbenmajia

只看该作者 3楼 发表于: 2009-12-24
呵呵,够详细的
安然.....
离线318065268
只看该作者 4楼 发表于: 2009-12-24
setCodecForCString( )函数
Email  rsail@126.com(私人邮箱)
QQ:   318065268
离线pywepe
只看该作者 5楼 发表于: 2009-12-24
引用第2楼dbzhang800于2009-12-24 00:18发表的  :
估计楼主这几天也快被折磨疯了。但其他人也爱莫能助,因为楼主问题一直没问到点子上。
比如这个楼主这个问题,其实 QByteArray 和 QDataStream 应该都是正确的
(你读出来的字符串p和你写进去的字符串应该是相同的)。
.......



昨晚上已经用 native2ascii.exe 解决了

tks
离线pywepe
只看该作者 6楼 发表于: 2009-12-24
引用第2楼dbzhang800于2009-12-24 00:18发表的  :
估计楼主这几天也快被折磨疯了。但其他人也爱莫能助,因为楼主问题一直没问到点子上。
比如这个楼主这个问题,其实 QByteArray 和 QDataStream 应该都是正确的
(你读出来的字符串p和你写进去的字符串应该是相同的)。
.......



很是受用
离线hehui

只看该作者 7楼 发表于: 2009-12-28
楼主这种做法相当不妥!
最好不要在文件中直接写中文!
快速回复
限100 字节
 
上一个 下一个