我有一个qsqlite,其中包含一个包含原始数据的列。
代码
QByteArray data= query.value("data").toString().toLatin1();
要么
QByteArray data= query.value("data").toByteArray();
除了某些值之外,给出完全相同的结果是正确的。原始数据ara中的某些字节被转换为0x3F。 (我认为价值大于某个值)
下面的代码给出了远远超出实际数据的结果。
data= query.value("data").toString().toUtf8()
我错过了什么?
---编辑(已添加示例数据)
sqlite中的真实原始数据:
01 a4 81 1c 20 02 00 ff
query.value("data").toString().toByteArray()
得到:
01 a4 81 1c 20 02 00 3f
query.value("data").toString().toUtf8()
得到:
01 c2 a4 c2 81 1c 20 02 00 ef bf bd
顺便说一下,我所说的原始数据类型是sqlite数据库中的BLOB。
看看QString::toLatin1()的文档。如果输入字符串包含非Latin1字符,则未定义。我猜这就是为什么某些值被替换为0x3f(在ASCII中为'?')的原因。
您知道原始数据最初是否代表任何编码中的字符序列?否则,我想将原始字节序列转换为特定的字符串编码没有多大意义。你可以尝试看看不同的string encodings。