![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
iddqd |
![]()
Сообщение
#1
|
![]() Студент ![]() Группа: Участник Сообщений: 32 Регистрация: 26.11.2009 Пользователь №: 1261 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Есть бинарный файл, в котом местами встречаются строки в кодировке utf8, перед каждой такой строкой стоит её длина в виде qint32.
Вот пример:
06000000 - длина данных с текстом в байтах, D098D0BCD18F - слово "Имя" в utf8 Пытаюсь читать вот так:
В консоли вижу нечитаемый набор символов и знаков вопросов вместо текста. Как правильнее реализовать чтение данных в этом случае? Qt 4.6, Win32 |
|
|
![]() |
DIMEDROLL |
![]()
Сообщение
#2
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 165 Регистрация: 28.9.2008 Из: Киев Пользователь №: 304 Спасибо сказали: 23 раз(а) Репутация: ![]() ![]() ![]() |
для начала попробуй так:
|
|
|
iddqd |
![]()
Сообщение
#3
|
![]() Студент ![]() Группа: Участник Сообщений: 32 Регистрация: 26.11.2009 Пользователь №: 1261 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Вот этот вариант
даёт в консоли "Имя??????????" Вроде нормально, только откуда эти знаки вопроса? |
|
|
DIMEDROLL |
![]()
Сообщение
#4
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 165 Регистрация: 28.9.2008 Из: Киев Пользователь №: 304 Спасибо сказали: 23 раз(а) Репутация: ![]() ![]() ![]() |
подозреваю что ты неправильно считываешь размер строки и соотвественно читаешь данные которые находятся за строкой, а потом их конвертишь в строку
![]() сколько у тебя labelLen выдает? |
|
|
iddqd |
![]()
Сообщение
#5
|
![]() Студент ![]() Группа: Участник Сообщений: 32 Регистрация: 26.11.2009 Пользователь №: 1261 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
labelLen после считывания равен 6. И 6 байт (по 2 байта на одну русскую букву в utf8) - это правильный размер данных с текстом.
|
|
|
iddqd |
![]()
Сообщение
#6
|
![]() Студент ![]() Группа: Участник Сообщений: 32 Регистрация: 26.11.2009 Пользователь №: 1261 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Разобрался. Надо было явно указать размер данных. Вот так всё работает и выводится правильный текст без знаков вопросов.
Сообщение отредактировал iddqd - 17.7.2010, 17:07 |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 27.2.2025, 5:47 |