| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [qt] кириллица и QByteArray |
| Автор: wester 2.5.2012, 15:25 | ||
| Доброго времени суток. Посылаю GET запрос с помощью QNetworkAccessManager, получаю ответ в виде QNetworkReply reply.
проблема в том, что в reply->readAll содержится кириллица и я ожидаемо получаю абракадабру. И так и сяк извращался - не понимаю, в чем затык. utf-8 взял, потому как сервер в хидерах указывает её. |
| Автор: bsa 2.5.2012, 15:39 | ||
wester, попробуй так:
|
| Автор: wester 2.5.2012, 16:51 |
| bsa, Так же абракадабра выводится вместо кириллицы. То есть это может быть не utf-8 , если fromUtf8() не помог? |
| Автор: borisbn 2.5.2012, 17:00 |
| wester, попробуй выгрузить reply->readAll() в файл, затем открой его каким-нибудь Notepad++ и попереключай кодировки. Как увидишь русские буквы - готово, кодировка известна. |
| Автор: wester 2.5.2012, 23:19 |
| Прокликал все кодировки - ни одна не подошла |
| Автор: bsa 3.5.2012, 12:24 |
| wester, выложи ответ сервера as-is (т.е. тупо сохрани в файл). Затем попробуй его открыть. Если не определишь кодировку, то выложи в открытый доступ мы посмотрим. |
| Автор: wester 3.5.2012, 13:04 |
| bsa, не совсем понял, что именно нужно сохранить. Хидеры сервера при ответе могу прочитать, проблема именно в теле ответа. http://rghost.ru/37888945 выложил полный ответ сервера в txt. Могу выложить программу (сорцы) на которой воспроизводится проблема. |
| Автор: borisbn 3.5.2012, 13:18 | ||||
wester, вот эти кракозябры
в шестнадцатиричном представлении:
это - действительно символы "i", вопросик, "e" и т.д. Если эти байты пришли с сервера, то дело плохо... надо разбираться с запросом, кодировкой ответа и т.п. У меня же есть подозрение, что те байты, которые пришли с сервера, сначала попали либо в QString, либо QTextCodec, либо ещё куда-то, а затем ты уже выложил их в файл. Сохрани в файле именно то, что пришло с сервера. Или выложи здесь код, при помощи которого получен прикреплённый выше файл (только ту часть, которая вычитала данные из сервера и записала в файл. остальное - коннект, создание networkReply и т.п. пока не нужно) |
| Автор: wester 3.5.2012, 14:39 | ||
вот исходник, как я получаю страницу |
| Автор: borisbn 3.5.2012, 15:05 | ||
аж с души слегло... с гуглом всё в порядке)) проверил твой код один в один (ни строчки не изменил). если смотреть этот файл в Utf-8, то получаем
Тогда давай так. Сделай проект с минимальным кол-вом кода, который повторял бы эту проблему и выложи сюда |
| Автор: CuteBunny 3.5.2012, 16:42 | ||||||
Попробуйте в main фукнции прописать:
Раз
|
| Автор: borisbn 3.5.2012, 16:50 | ||
CuteBunny, может, конечно, и поможет, но я сейчас посмотрел - у меня в main() стоит
у меня шаблон на создание проекта такой... однако, приведённый код дал указанный результат. тут в чём-то другом дело, ИМХО |
| Автор: CuteBunny 3.5.2012, 16:53 | ||||
Ну тогда я не знаю даже... ИМХО, я всегда все проекты в utf-8 создаю, выставляю кодеки для строк, локали и тр + сохраняю исходники в utf-8 кодировке, мне так удобнее, хотя конечно был момент, когда файл на входе подавался от 1С в windows-1251, там просто при работе с файлом переключал кодировку на 1251 да и всё. |
| Автор: wester 3.5.2012, 18:42 | ||
| CuteBunny, Может я ошибаюсь, но подобное
Нужно для строк, которые пишутся в самом коде, типа label->setText("nameOfControl"); Поправьте если ошибаюсь. borisbn, Сделал проект, на котором воспроизводится ошибка. http://rghost.ru/37895038 Там же лежит файл (out.txt), который у меня на системе записывается. Qt 4.7.4 |
| Автор: wester 3.5.2012, 23:04 | ||||
| Проблема решена. в main добавил
А на контрол отображаю
Спасибо всем отписавшимся! |