Чтение исходных данных sqlite в QByteArray - PullRequest
0 голосов
/ 04 марта 2019

У меня есть qsqlite, столбец которого содержит необработанные данные.

Коды

QByteArray data= query.value("data").toString().toLatin1();

или

QByteArray data= query.value("data").toByteArray();

дают точно такие же результаты, которые являются правильными, за исключением некоторых значений.Некоторые байты в исходных данных конвертируются в 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

Кстати, тип необработанных данных, о которых я говорю, это BLOB в базе данных sqlite.

1 Ответ

0 голосов
/ 04 марта 2019

Посмотрите документацию QString :: toLatin1 () .Не определено, если входная строка содержит символы не из Latin1.Я предполагаю, что это причина, по которой некоторые значения заменяются на 0x3f (что в ASCII равно '?').

Знаете ли вы, что необработанные данные первоначально представляли последовательность символов в какой-либо кодировке?В противном случае, я думаю, что нет смысла преобразовывать необработанную последовательность байтов в конкретную строковую кодировку.Вы можете попробовать взглянуть на различные строковые кодировки .

...