QWebView::setHtml 的预期编码是啥?

Posted

技术标签:

【中文标题】QWebView::setHtml 的预期编码是啥?【英文标题】:What is the expected encoding for QWebView::setHtml?QWebView::setHtml 的预期编码是什么? 【发布时间】:2013-02-20 18:13:28 【问题描述】:

我发现了一个我不明白的奇怪效果:我有一个用 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。

【问题讨论】:

【参考方案1】:

没有预期的编码,因为当您创建 QString 时,文本应该已经被解码为 16 位 unicode。这取决于您是否正确地执行此操作,但如果您使用 QString(const QByteArray&) 构造函数,那么 Qt 默认会将内容视为 ASCII。

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

【讨论】:

啊,谢谢!我对 QString 中的 utf-8 与 unicode 编码感到困惑。我实际上尝试了 QTextCodec 以查看它是否有所作为,但使用不正确。第二天一切都变得清晰了;) 我认为混淆的根源是加载文件时从元标记中获取编码,但在从 QString 设置时假定为 16 位 unicode,因此基本上 charset=... 被忽略。 【参考方案2】:

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

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

因为 QtWebKit 在 self 内部使用了对 std::string 的转换。

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于QWebView::setHtml 的预期编码是啥?的主要内容,如果未能解决你的问题,请参考以下文章

这是我在下面给出的代码。预期标识符的解决方案是啥

教改论文预期成果是啥?

fchmod 之后写入的预期行为是啥?

匹配内部可变枚举的预期方法是啥?

在预期时处理 NumberFormatException 的正确方法是啥?

JavaScript 中 eval 的预期目的是啥? [复制]