Russian Qt Forum

Qt => Работа с сетью => Тема начата: QuAzI от Март 20, 2012, 14:56



Название: QWebView перегрузка кодировки
Отправлено: 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();
}


Название: Re: QWebView перегрузка кодировки
Отправлено: RealDuke от Март 21, 2012, 14:10
Попробуй в мейне
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
прописать.


Название: Re: QWebView перегрузка кодировки
Отправлено: QuAzI от Март 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();


Название: Re: QWebView перегрузка кодировки
Отправлено: QuAzI от Март 27, 2012, 16:37
Т.к. упёрся в непонятные грабли с QWebView и SIGFPE (http://www.prog.org.ru/topic_21423_0.html), теперь снова тяну вручную контент и пытаюсь отобразить в 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.  Что так плющит веб-страницу?


Название: Re: QWebView перегрузка кодировки
Отправлено: RealDuke от Апрель 16, 2012, 10:28
У меня так, в мейне:
Код
C++ (Qt)
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));

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

Тоже долго бился с этим. Возможно поможет.


Название: Re: QWebView перегрузка кодировки
Отправлено: xiva от Август 09, 2012, 11:24
Я тоже столкнулся с проблемой определения кодировки при загрузке html через webView->setHtml
Решение для меня оказалось простое.
Вместо webView->setHtml использовать webView->setContent( mainPage, "text/html", reply->url() ). Давая понять с первого раза, какой именно MIME type я сейчас загружаю в webView.
Надеюсь кому-нибудь пригодится это решение.