标题:Qt的一个编码问题
作者:lirichard
日期:2020-03-21 23:16
内容:
用Qt写一个小程序时,涉及到了读写文件的操作,所以我将QString转为QByteArray,然后将QByteArray转为16进制编码后使用QFile写入文件。之后通过QFile读取文件,将读取的QByteArray转换为QByteArray::fromHex,之后再将QByteArray转为QString。如下图所示:
写入文件部分代码:
读取时的部分代码:
写入时QString的结构图:
读取时QString的
可以看出两者基本相同,但有几个字符不同,不知道为啥,写和读都用的同一套编码方式为啥两者的内容不同??很迷惑。。。
#1 [20091001753 03-22 04:55]
写入:
QString str=u8"你好";
file.write(str.toUtf8());
读取:
auto str = QString::fromUtf8(file.readAll());
#2 [lwei24 05-22 19:34]
你在读数据的时候,不理解你怎么读完后,又再次覆盖: bytes = bytes.fromHex(bytes);这样写:bytes =QByteArray::fromHex(bytes);更好理解吧。还有,你可以打印看看它的数据到底一不一样。我试过,它实际上数据是一样的。
#3 [lemonzll 05-24 18:39]
你这个最早那个QString就有问题,QString里面有很多数字不能用utf8编码,例如0xd8c0,调用toUtf8转成QByteArray的时候,0xd8c0转不成有效的utf8,就转成了个问号,也就是用0x3f替代了,这就开始出错了。这个估计得从源头开始,数据最早就不能用qstring存储
#4 [fsu0413 06-10 07:11]
不用tohex试试,我觉得问题可能就在tohex上