定义QWebElement的`toPlainText()`的字符编码

问题描述 投票:0回答:1

我在处理QWebKit的QWebElement及其toPlainText()函数(*)时遇到了字符编码的问题。

我有一个带有UTF8编码的QString,其中包含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对输入和输出使用特定的字符编码?


[*] Using QWebElement::toOuterXml() or QWebElement::toInnerXml() show the same encoding problem.
qt character-encoding qtwebkit
1个回答
1
投票

您是否尝试过使用QString的***()函数来查找toPlainText()返回的字符串是如何编码的?

文件说明

使用此方法时,WebKit假定外部资源(如JavaScript程序或样式表)以UTF-8编码,除非另有说明。例如,可以通过HTML脚本标记的charset属性指定外部脚本的编码。编码也可以由Web服务器指定。''。

因此,我会尝试更改您加载的html源(在相应的元标记中)中指定的字符集,以明确指定您使用的是UTF-8。

© www.soinside.com 2019 - 2024. All rights reserved.