Russian Qt Forum
Июнь 16, 2024, 05:06 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: От сервера приходят данные в ужасной кодировке cp-1251.....  (Прочитано 4166 раз)
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...
« Последнее редактирование: Март 04, 2013, 12:36 от lolbla2 » Записан
alexis031182
Гость
« Ответ #1 : Март 04, 2013, 12:42 »

Может быть так:
Код
C++ (Qt)
QTextCodec *text_codec = QTextCodec::codecForName("Windows-1251");
QByteArray data_utf = text_codec->toUnicode(data_cp1251);
Записан
alexis031182
Гость
« Ответ #2 : Март 04, 2013, 12:47 »

Ну и конечно можно ещё HTTP-заголовок "Accept-Charset: utf-8" отправлять на сервер. Но для этого нужно иметь возможность модификации объекта QNetworkRequest.
Записан
lolbla2
Гость
« Ответ #3 : Март 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);
}
 
« Последнее редактирование: Март 04, 2013, 13:03 от lolbla2 » Записан
alexis031182
Гость
« Ответ #4 : Март 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 знает устанавливаемый заголовок, то проще ему значение присвоить. Нет необходимости придерживаться правил синтаксиса протокола.
Записан
alexis031182
Гость
« Ответ #5 : Март 04, 2013, 13:10 »

Если не помогает, то, возможно, сервер просто не настроен на возможность отдачи контента в Utf-8. Заголовок - он ведь всего лишь как просьба. Диалог такой получается:

Клиент: можешь скинуть в Utf-8?
Сервер: неа, лови, что есть
Записан
lolbla2
Гость
« Ответ #6 : Март 04, 2013, 13:55 »

Если не помогает, то, возможно, сервер просто не настроен на возможность отдачи контента в Utf-8. Заголовок - он ведь всего лишь как просьба. Диалог такой получается:

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

Понял, спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.095 секунд. Запросов: 20.