LINUX.ORG.RU

[Qt4] Network & encoding


0

1

Есть некий QNetworkAccessManager, с его помощью получаю данные по HTTP, в UTF-8 кодировке (страница, к которой обращаюсь в юникоде), однако данные приходят в хрен его знает в каком виде, и отображаются, соответственно, какими-то кракозябрами. Гугл обиделся и не помогает :(


Приходит примерно в таком виде: уматурман

Opik
() автор топика

>данные приходят в хрен его знает в каком виде

Ну так это проблема не твоей поделки, а того, кто тебе их в таком виде посылает.

А чем отображать пытаешься?

Zhbert ★★★★★
()
Ответ на: комментарий от Zhbert

Ну после манипуляции с этими данными я их записываю в QTableWidget

Opik
() автор топика
Ответ на: комментарий от Zhbert

Данные же приходят в юникоде (по крайней мере если открыть тот же URL в файрбаге и посмотреть на заголовки).

Opik
() автор топика
Ответ на: комментарий от namezys

Данные приходят в JSON формате. Т.о. сначала паршу потом в таблицу загоняю.

А ты уверен,что utf8 пришло?

Первая поделка на Qt, как проверить? :)

Opik
() автор топика
Ответ на: комментарий от namezys

Ну по крайней мере хром говорит, что в заголовке: Content-Type:text/javascript; charset=utf-8

Opik
() автор топика

оно приходит в таком виде, или оно отображается в таблице в таком виде?

Покажи код манипуляции

alex_custov ★★★★★
()
Ответ на: комментарий от namezys

connect(&networkManager, SIGNAL(finished(QNetworkReply*)), SLOT(replyFinished(QNetworkReply*)));


void PlayerWindow::replyFinished(QNetworkReply* pReply)
{
QString data(pReply->readAll());
qDebug() << data;
}


Даже так на консоль сразу приходит хрень.

Opik
() автор топика
Ответ на: комментарий от namezys

Спасибо, добрый человек, помогло :) Буду знать!

Opik
() автор топика

В Qt обмен по сети и с файлами всегда проходит с помощью кучи байтов (QByteArray). Приводи к QString и все.

PayableOnDeath
()
Ответ на: комментарий от namezys

Да, насчет tr в курсе, ещё раз спасибо

Opik
() автор топика
Ответ на: комментарий от PayableOnDeath

это нечто большее чем просто перевод. это еще и поддержка разных локалей, ибо если ты на винде бросаешь выхлоп в консоль то qDump() на входе предполагает cp1251, а не то что тебе кажется очевидным.
неочевидные дефолты локали на разных платформах могут порождать глюки вроде сабжа. по этой причине тролли советуют делать любой выхлоп через tr() - это гарантия того что на экране у тебя будут внятные нац символы а не краказяблы/вопросики или еще что.

VladimirMalyk ★★★★★
()

#include <QTextCodec>

// Skipped...

QTextCodec *codec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForTr(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForLocale(codec);
m0rph ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.