Russian Qt Forum

Qt => Qt Script, QtWebKit => Тема начата: lolbla2 от Март 04, 2013, 12:31



Название: От сервера приходят данные в ужасной кодировке cp-1251.....
Отправлено: lolbla2 от Март 04, 2013, 12:31
Мне нужно перекодировать эти данные в UTF-8  ибо русские символы в виде крякозяберных вопросиков... Может можно как-то QNetWorkAccessManager'у сказать чтобы он перекодировал?
в мэйне прописано:

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf-8"));
    QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));

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


Название: Re: От сервера приходят данные в ужасной кодировке cp-1251.....
Отправлено: alexis031182 от Март 04, 2013, 12:42
Может быть так:
Код
C++ (Qt)
QTextCodec *text_codec = QTextCodec::codecForName("Windows-1251");
QByteArray data_utf = text_codec->toUnicode(data_cp1251);


Название: Re: От сервера приходят данные в ужасной кодировке cp-1251.....
Отправлено: alexis031182 от Март 04, 2013, 12:47
Ну и конечно можно ещё HTTP-заголовок "Accept-Charset: utf-8" отправлять на сервер. Но для этого нужно иметь возможность модификации объекта QNetworkRequest.


Название: Re: От сервера приходят данные в ужасной кодировке cp-1251.....
Отправлено: lolbla2 от Март 04, 2013, 13:00
Ну и конечно можно ещё HTTP-заголовок "Accept-Charset: utf-8" отправлять на сервер. Но для этого нужно иметь возможность модификации объекта QNetworkRequest.

Спасибо первый вариант работает, но с HTTP-заголовок "Accept-Charset: utf-8"  решение вроде как лучше. Можно поподробнее про него? Я же могу в объекте QNetworkRequest установить с помощью setHeader  или setRawHeader (кстати чем отличаются?) ?
Пробую вот так, не помогает:
Код
C++ (Qt)
QNetworkReply *WebTVResolver::request(QUrl url)
{
   QNetworkRequest req(url);
   req.setRawHeader("Accept-Charset", "UTF-8");
   qWarning()<< __PRETTY_FUNCTION__<< url;
   return m_network->get(req);
}
 


Название: Re: От сервера приходят данные в ужасной кодировке cp-1251.....
Отправлено: alexis031182 от Март 04, 2013, 13:07
Вот такие можно заголовки отправлять:
Код
C++ (Qt)
QNetworkRequest request;
request.setUrl(url);
request.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
request.setRawHeader("Accept-Charset", "UTF-8,*;q=0.5");
request.setRawHeader("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
request.setRawHeader("Connection", "keep-alive");
request.setRawHeader("User-Agent", "Opera/9.00 (Windows NT 5.1; U; ru)");

Разницы между setHeader() и setRawHeader() в общем-то никакой. Разве что в первом случае, если Qt знает устанавливаемый заголовок, то проще ему значение присвоить. Нет необходимости придерживаться правил синтаксиса протокола.


Название: Re: От сервера приходят данные в ужасной кодировке cp-1251.....
Отправлено: alexis031182 от Март 04, 2013, 13:10
Если не помогает, то, возможно, сервер просто не настроен на возможность отдачи контента в Utf-8. Заголовок - он ведь всего лишь как просьба. Диалог такой получается:

Клиент: можешь скинуть в Utf-8?
Сервер: неа, лови, что есть


Название: Re: От сервера приходят данные в ужасной кодировке cp-1251.....
Отправлено: lolbla2 от Март 04, 2013, 13:55
Если не помогает, то, возможно, сервер просто не настроен на возможность отдачи контента в Utf-8. Заголовок - он ведь всего лишь как просьба. Диалог такой получается:

Клиент: можешь скинуть в Utf-8?
Сервер: неа, лови, что есть

Понял, спасибо.