• 2225阅读
  • 4回复

Qt的一个编码问题 [复制链接]

上一主题 下一主题
离线lirichard
 

只看楼主 倒序阅读 楼主  发表于: 2020-03-21
用Qt写一个小程序时,涉及到了读写文件的操作,所以我将QString转为QByteArray,然后将QByteArray转为16进制编码后使用QFile写入文件。之后通过QFile读取文件,将读取的QByteArray转换为QByteArray::fromHex,之后再将QByteArray转为QString。如下图所示:
写入文件部分代码:



读取时的部分代码:


写入时QString的结构图:


读取时QString的


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

离线20091001753

只看该作者 1楼 发表于: 2020-03-22
写入:
QString str=u8"你好";
file.write(str.toUtf8());

读取:
auto str = QString::fromUtf8(file.readAll());
(づ ̄ 3 ̄)づ
离线lwei24

只看该作者 2楼 发表于: 2020-05-22
你在读数据的时候,不理解你怎么读完后,又再次覆盖: bytes = bytes.fromHex(bytes);这样写:bytes =  QByteArray::fromHex(bytes);更好理解吧。还有,你可以打印看看它的数据到底一不一样。我试过,它实际上数据是一样的。
离线lemonzll

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

只看该作者 4楼 发表于: 2020-06-10
不用tohex试试,我觉得问题可能就在tohex上
快速回复
限100 字节
 
上一个 下一个