我有一个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。
答案 0 :(得分:1)
看看QString::toLatin1()的文档。如果输入字符串包含非Latin1字符,则未定义。我想这就是为什么某些值被0x3f(ASCII中的“?”)替换的原因。
您知道原始数据是否最初以任何编码形式表示字符序列?否则,我想将原始字节序列转换为特定的字符串编码没有多大意义。您可以尝试看看其他string encodings。