2013-02-20 42 views
1

我發現了一個奇怪的效果,我不明白:我有一個用UTF-8編碼的HTML文件。它也有一個元素content="text/html; charset=UTF-8"/>QWebView :: setHtml的預期編碼是什麼?

如果我在QWebView中加載HTML文件,它會正確顯示。如果我將HTML文件加載到QByteArray(仍然看起來像有效的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來閱讀許多不同的編碼。

+0

啊,謝謝!我對QString中的utf-8與unicode編碼感到困惑。我其實嘗試過QTextCodec,看它是否有所作爲,但不正確地使用它。一切都更清晰的第二天;) – Christian 2013-02-21 10:20:46

+0

我認爲混淆的根源是,加載文件時從元標記中取出編碼,但從QString設置時假定是16位unicode,所以基本上charset = ...被忽略。 – Christian 2013-02-21 10:30:48

0

爲了解決這個問題,我重複很多情況下,但真正是在於:

QTextCodec來:: setCodecForCStrings(QTextCodec來:: codecForName( 「UTF-8」));

因爲QtWebKit使用轉換爲自我內部的std :: string。

+0

在qt5中沒有「setCodecForCStrings」 – jondinham 2014-03-24 03:42:38

0

我用setContent(bytearray,「text/html; charset = utf-8」),它工作。 「utf-8」應該是小寫字母。