Russian Qt Forum
Сентябрь 27, 2024, 10:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QWebView перегрузка кодировки  (Прочитано 5116 раз)
QuAzI
Гость
« : Март 20, 2012, 14:56 »

Есть страница, в начале явно задана кодировка
Код:
<html>
<HEAD>
<META http-equiv=content-type content="text/html; charset=windows-1251">
</HEAD>
<body>
Выгребаю её, засовываю в QWebView и вижу абракадабру. Как только жму на любой элемент страницы, который перегружает страницу или страница сама обновляется (там таймер на js), кодировка определяется. Как бы поправить поведение при первой загрузке страницы?
Выгребаю пока так
Код:
void Widget::httpFinished()
{
 qDebug() << reply->errorString();
 QByteArray mainPage = reply->readAll();
 ui->webView->setHtml( mainPage, reply->url() );
 qDebug() << mainPage;
 reply->deleteLater();
}
Записан
RealDuke
Гость
« Ответ #1 : Март 21, 2012, 14:10 »

Попробуй в мейне
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
прописать.
Записан
QuAzI
Гость
« Ответ #2 : Март 22, 2012, 11:21 »

И сломать кодировку в остальных местах. В мейне я уже жёстко задаю в каждом проекте
Код:
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
Чтобы знать, с чем работаю не зависимо от ОС и не наступать на грабли с приведением кодировок.
Оказалось прямая загрузка URL даёт нужный результат сразу, а вот если передавать через результат - то фигушки, только после обновления страницы. Уже успел почитать на этом же форуме про похожие приколы у людей, грузивших локальные страницы.
Код:
    ui->webView->load(QUrl(ui->lineEdit->text()));
    ui->webView->show();
Записан
QuAzI
Гость
« Ответ #3 : Март 27, 2012, 16:37 »

Т.к. упёрся в непонятные грабли с QWebView и SIGFPE, теперь снова тяну вручную контент и пытаюсь отобразить в QTextBrowser вместо QWebView. Всё бы ничего, но кодировки упёрто плывут и подобрать не удаётся.
Код:
    QNetworkReply *reply;
    QNetworkAccessManager *nam;
    QNetworkRequest request;
...
    request.setUrl(QUrl( ui->lineEdit->text() ));
    reply = nam->get(request);
    connect(reply, SIGNAL(finished()), this, SLOT(httpFinished()));
...
void Widget::httpFinished()
{
 QByteArray mainPage = reply->readAll();

 qDebug() << mainPage;

 ui->textBrowser->setHtml( mainPage );
 ui->textBrowser->show();

 reply->deleteLater();
}
qDebug() у меня пишет в файл. Открываю файл, смотрю в HEX, вижу что всё, что было на русском, теперь заполнено так: EF BF BD EF BF BD EF BF BD... т.е. в исходнике символы разные, а на выходе в QByteArray прилетает EF BF BD.  Что так плющит веб-страницу?
Записан
RealDuke
Гость
« Ответ #4 : Апрель 16, 2012, 10:28 »

У меня так, в мейне:
Код
C++ (Qt)
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));

В реализации:
Код
C++ (Qt)
page->mainFrame()->setHtml(QString::fromUtf8(reply->readAll()).toAscii());

Тоже долго бился с этим. Возможно поможет.
Записан
xiva
Гость
« Ответ #5 : Август 09, 2012, 11:24 »

Я тоже столкнулся с проблемой определения кодировки при загрузке html через webView->setHtml
Решение для меня оказалось простое.
Вместо webView->setHtml использовать webView->setContent( mainPage, "text/html", reply->url() ). Давая понять с первого раза, какой именно MIME type я сейчас загружаю в webView.
Надеюсь кому-нибудь пригодится это решение.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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