2011-05-15 2 views
1

나는 3 일 넘게 동일한 문제에 처해 있었고 코드에 어떤 문제가 있는지 알 수 없다.Qt : QWebView와 QByteArray가 인코딩 충돌을 야기 함

내 프로그램은 HTML 콘텐츠를 나타 내기 위해 QWebView 창을 사용합니다. 이 HTML 컨텐트는 사용자 설정에 따라 즉석에서 생성됩니다. 나는 QXmlStreamWriter을 사용하여 HTML 파일을 생성한다. QXmlStreamQIODevice을 필요로하므로 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

QXmlStreamWriterQString에 직접 글을 쓸 수 있습니다. (Qt 4.3에서 도입 되었기 때문에) QByteArray으로 인코딩이 잘못 될 가능성을 추가 할 필요가 없습니다.

예. 소스 데이터 인코딩은 당신이 생각하지 않을 수 있습니다 - 더 문제의 세부 사항 (코드 조각 및 데이터없이

#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(); 
} 

캡처 :이 (사소한) 조각은 (소스 파일이 UTF-8 인코딩) 잘 작동합니다 그것은), 이것보다 더 많은 것을 도울 수 없다.