估计楼主这几天也快被折磨疯了。但其他人也爱莫能助,因为楼主问题一直没问到点子上。
比如这个楼主这个问题,其实 QByteArray 和 QDataStream 应该都是正确的
(你读出来的字符串p和你写进去的字符串应该是相同的)。
你应该搞清楚这个:
不妨看看QString的manual,你这个调用哪一个构造函数?
是
- QString::QString ( const char * str )
(然后如果你看过这个构造函数的说明,会发现上面已经说的很详细了。)
我们继续,假定你对汉字编码有些了解。可以知道
“地方政府” 这四个汉字,gbk编码是
- "\xb5\xd8\xb7\xbd\xd5\xfe\xb8\xae"
如果你是在windows下,那么你写的其实是就是
- QString("\xb5\xd8\xb7\xbd\xd5\xfe\xb8\xae");
如果你的源文件不是gbk编码,而是utf8编码,那么,你写的就是
- 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"); 如果你要跨平台
其他不多说了,说多了楼主也不一定感兴趣