Определить кодировку символов QWebElement `toPlainText ()` - PullRequest
0 голосов
/ 29 ноября 2011

У меня возникают проблемы с освоением кодировки символов при работе с QWebElement QWebKit и его toPlainText() функцией (*).

У меня есть QString с кодировкой UTF8, содержащей содержимое HTML-страницы, которая была прочитана с локального диска через QFile. Нет, я хочу проанализировать эту страницу с помощью QWebKit. Таким образом, я определил объект QWebFrame как часть QWebPage. С QWebFrame::setHtml() я заполнил QString в среду QWebKit.

QString rawReport = "some UTF8 encoded string read in previously";
QWebPage p;
QWebFrame *frame = p.mainFrame();
frame->setHtml(rawReport);
QWebElement report = frame->documentElement();
qDebug() << report.toPlainText();

Но почему-то, qDebug(), похоже, неправильно использует кодировку, как, например, немецкие умлауты äöüß показаны довольно забавно. Даже не как соответствующие им объекты HTML.
Я сомневаюсь, что это вина qDebug, а скорее кодировка внутри QWebElement. Где-то я читал, что QWebFrame::setHtml() ожидает кодировку UTF8. Но я почти уверен, что это именно тот случай.

Что мне не хватает? Есть ли где-нибудь функция / опция, чтобы заставить QWebFrame / QWebElement использовать определенную кодировку как для ввода, так и для вывода?


[*] Использование QWebElement::toOuterXml() или QWebElement::toInnerXml() показывает ту же проблему кодирования.

1 Ответ

1 голос
/ 29 ноября 2011

Вы пытались использовать функции из *** () QString, чтобы найти, как кодируется строка, возвращаемая toPlainText ()?

В документации говорится

При использовании этого метода WebKit предполагает, что внешние ресурсы, такие как программы JavaScript или таблицы стилей, кодируются в UTF-8, если не указано иное.Например, кодировка внешнего сценария может быть указана с помощью атрибута charset тега HTML-сценария.Также возможно, чтобы кодировка была указана веб-сервером. ''.

Поэтому я бы попытался изменить кодировку, указанную в источнике html (в соответствующем метатеге), который вы загружаете, чтобы явно указать, что вы используете UTF-8.

...