2011-05-15 73 views
1

我一直坐在相同的问题已超过三天了,我无法弄清楚我的代码有什么问题。Qt:QWebView和QByteArray导致编码冲突

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

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

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

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

回答

2

QXmlStreamWriter可以很好地直接写入QString(因为它是在Qt 4.3中引入的),所以不需要增加额外的机会使编码错误QByteArray

E.g.这(微不足道)段工作得很好(源文件编码为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(); 
} 

没有你的问题的更多细节(代码段和数据捕获 - 您的源数据的编码可能不是你所想它是),不能比这个更帮忙。