查看完整版本: [-- Qt的一个编码问题 --]

QTCN开发网 -> Qt基础编程 -> Qt的一个编码问题 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

lirichard 2020-03-21 23:16

Qt的一个编码问题

用Qt写一个小程序时,涉及到了读写文件的操作,所以我将QString转为QByteArray,然后将QByteArray转为16进制编码后使用QFile写入文件。之后通过QFile读取文件,将读取的QByteArray转换为QByteArray::fromHex,之后再将QByteArray转为QString。如下图所示:
写入文件部分代码:
[attachment=21423]


读取时的部分代码:
[attachment=21421]

写入时QString的结构图:
[attachment=21424]

读取时QString的
[attachment=21422]

可以看出两者基本相同,但有几个字符不同,不知道为啥,写和读都用的同一套编码方式为啥两者的内容不同??很迷惑。。。


20091001753 2020-03-22 04:55
写入:
QString str=u8"你好";
file.write(str.toUtf8());

读取:
auto str = QString::fromUtf8(file.readAll());

lwei24 2020-05-22 19:34
你在读数据的时候,不理解你怎么读完后,又再次覆盖: bytes = bytes.fromHex(bytes);这样写:bytes =  QByteArray::fromHex(bytes);更好理解吧。还有,你可以打印看看它的数据到底一不一样。我试过,它实际上数据是一样的。

lemonzll 2020-05-24 18:39
你这个最早那个QString就有问题,QString里面有很多数字不能用utf8编码,例如0xd8c0,调用toUtf8转成QByteArray的时候,0xd8c0转不成有效的utf8,就转成了个问号,也就是用0x3f替代了,这就开始出错了。这个估计得从源头开始,数据最早就不能用qstring存储

fsu0413 2020-06-10 07:11
不用tohex试试,我觉得问题可能就在tohex上


查看完整版本: [-- Qt的一个编码问题 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled