【问题标题】:Define Character Encoding of QWebElement's `toPlainText()`定义 QWebElement 的 `toPlainText()` 的字符编码
【发布时间】:2019-03-04 09:52:58
【问题描述】:

在处理 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 对输入和输出都使用特定的字符编码?


[*] 使用QWebElement::toOuterXml()QWebElement::toInnerXml() 显示相同的编码问题。

【问题讨论】:

    标签: qt character-encoding qtwebkit


    【解决方案1】:

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

    文档说明

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

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

    【讨论】:

    • 感谢您的回答,@ixM。您提到的相应元标记已经存在:&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;。另一件事:使用 from***() 函数是什么意思?它们不采用 toPlainText() 返回的 QString。
    • 见我上面的编辑。您的回答让我在我的小程序的几乎每个点检查每个 QString (和相关对象)的编码。谢谢。
    猜你喜欢
    • 2011-01-20
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 2010-12-28
    相关资源
    最近更新 更多