Qt: QWebView и QByteArray вызывают конфликт кодировки - PullRequest
1 голос
/ 16 мая 2011

Я уже три дня сижу на одной и той же проблеме, и я не могу понять, что не так с моим кодом.

Я - моя программа, я использую окно QWebView для представления содержимого HTML.Этот HTML-контент генерируется на лету на основе пользовательских настроек.Я использую QXmlStreamWriter для создания HTML-файла.QXmlStream нужен QIODevice, поэтому я создаю QByteArray, записываю в него HTML-код и в конце я создаю QString из QByteArray.Когда я печатаю этот код в QWebView, он неправильно отображает специальные символы (например, немецкие умлауты или русские буквы).Тем не менее, если я сохраню сгенерированный код в HTML-файл, откроется Firefox, отображает эти символы правильно.

Сгенерированный HTML-код содержит тег <meta http-equiv="Content-Type" content="text/html; charset=utf-8">.

Я уже пытался установить кодек для строк, преобразовать строку в различные форматы и воспроизвести сам QByteArray.Я использую Qt 4.7.3.для Windows Desktop с MinGW 4.4.

Полагаю, я упускаю важный момент в истории кодирования и буду признателен за любую помощь!Проблема действительно раздражает и мешает мне завершить мою идею!Спасибо!

1 Ответ

2 голосов
/ 16 мая 2011

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

Без более подробной информации о вашей проблеме (фрагменты кода и сбор данных - ваша исходная кодировка может отличаться от того, что вы думаете), ничто не может помочь.

...