1

我已经坐在同一个问题上超过三天了,我无法弄清楚我的代码有什么问题。

我是我的程序,我使用一个QWebView窗口来表示 HTML 内容。此 HTML 内容是根据用户设置即时生成的。我QXmlStreamWriter用来生成 HTML 文件。QXmlStream需要一个QIODevice,所以我创建了一个QByteArray,将 HTML 代码写入其中,最后我QStringQByteArray. 当我在 中打印此代码时QWebView,它不会正确显示特殊符号(如德语变音符号或俄语字母)。但是,如果我将生成的代码保存到 HTML 文件中,Firefox 打开时会正确显示这些字符。

生成的 HTML 包含<meta http-equiv="Content-Type" content="text/html; charset=utf-8">标签。

我已经尝试为字符串设置编解码器,并将字符串转换为不同的格式并围绕其QByteArray本身进行播放。我使用 Qt 4.7.3。用于带有 MinGW 4.4 的 Windows 桌面。

我想,我错过了编码故事中的一个重要点,我将不胜感激任何帮助!这个问题真的很烦人,它阻止我完成我的想法!谢谢!

4

1 回答 1

2

QXmlStreamWriter可以很好地QString直接写入(因为它是在 Qt 4.3 中引入的),无需添加额外的导致编码错误的机会QByteArray.

例如,这个(微不足道的)片段可以正常工作(源文件以 UTF-8 编码):

#include <QXmlStreamWriter>
#include <QApplication>
#include <QWebView>

int main(int argc, char **argv)
{
    QApplication app(argc, argv);

    QString bytes;
    QXmlStreamWriter xs(&bytes);

    xs.writeDTD("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">");
    xs.writeStartElement("html");
    xs.writeStartElement("body");
    xs.writeTextElement("h1", QString::fromUtf8("éëè абвгдеёж 漢字"));
    xs.writeEndElement();
    xs.writeEndElement();

    QWebView w;
    w.setHtml(bytes);
    w.show();
    return app.exec();
}

如果没有您的问题的更多详细信息(代码片段和数据捕获 - 您的源数据编码可能不是您认为的那样),除此之外无济于事。

于 2011-05-16T06:50:58.163 回答