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 的预期编码是啥?的主要内容,如果未能解决你的问题,请参考以下文章