将sqlite原始数据读入QByteArray

问题描述 投票:0回答:1

我有一个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。

c++ qt sqlite qstring qbytearray
1个回答
1
投票

看看QString::toLatin1()的文档。如果输入字符串包含非Latin1字符,则未定义。我猜这就是为什么某些值被替换为0x3f(在ASCII中为'?')的原因。

您知道原始数据最初是否代表任何编码中的字符序列?否则,我想将原始字节序列转换为特定的字符串编码没有多大意义。你可以尝试看看不同的string encodings

© www.soinside.com 2019 - 2024. All rights reserved.