1

我发现了一个我不理解的奇怪效果:我有一个用 UTF-8 编码的 HTML 文件。它还有一个带有content="text/html; charset=UTF-8"/>.

如果我在 QWebView 中加载 HTML 文件,它会正确显示。

如果我在 QByteArray 中加载 HTML 文件(仍然看起来像有效的 UTF-8),将其转换为 QString(仍然看起来像有效的 UTF-8),并通过 QWebView 上的 setHTML 设置它,它显示不正确(好像解释为 ASCII)。

如果我采用相同的 QByteArray,并通过 QWebView 上的 setContent 设置它,将 "text/html; charset=UTF-8" 作为 mime 类型传递,它会再次正确显示。

QWebView::setHtml 的预期编码是什么?该文档仅提到外部 CSS 和脚本文件被解释为 UTF-8。这是使用 Qt 4.8.2。

4

3 回答 3

1

没有预期的编码,因为当您创建QString. 是否正确由您决定,但如果您使用QString(const QByteArray&)构造函数,那么 Qt 默认会将内容视为 ASCII。

如果要将内容视为 UTF-8,则可以使用QString::fromUtf8. 如果您需要做一些更复杂的事情,您可以使用它QTextCodec来读取许多不同的编码。

于 2013-02-20T18:27:04.547 回答
0

为了解决这个问题,我迭代了很多案例,但真正的情况是:

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF8"));

因为 QtWebKit 在 self 中使用了转换为 std::string 的方法。

于 2013-08-25T11:16:47.543 回答
0

我使用了 setContent(bytearray, "text/html; charset=utf-8") 并且它有效。“utf-8”应该是小写的。

于 2014-10-18T00:54:03.560 回答