【问题标题】:Reading sqlite raw data into QByteArray将 sqlite 原始数据读入 QByteArray
【发布时间】:2019-07-25 20:18:08
【问题描述】:

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

【问题讨论】:

  • 你是什么意思,"下面的代码给出了一个超出真实数据的结果。"。请添加minimal reproducible example
  • 我已经添加了示例。
  • query.value("data").toByteArray() 产生什么?

标签: c++ qt sqlite qstring qbytearray


【解决方案1】:

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

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

【讨论】:

  • 如果我将连接 text_factory 设置为字节,我可以通过 python 读取数据。 Qt 的问题我找不到做同样事情的方法。 Qt 坚持将 BLOB 作为 QString 而不是 byteArray。顺便说一句,原始数据不代表任何编码的字符串。这只是原始数据。
猜你喜欢
  • 1970-01-01
  • 2019-04-05
  • 2015-01-27
  • 2020-05-29
  • 1970-01-01
  • 2016-02-02
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多