Question

Je suis assis sur le même problème depuis plus de trois jours maintenant et je ne peux pas comprendre ce qui ne va pas avec mon code.

Je suis mon programme, j'utilise un QWebView fenêtre pour représenter le contenu HTML. Ce contenu HTML est généré à la volée, en fonction des paramètres utilisateur. j'utilise QXmlStreamWriter Pour générer un fichier HTML. QXmlStream a besoin d'une QIODevice, donc je crée un QByteArray, écrivez du code html dedans et à la fin je crée un QString hors de QByteArray. Quand j'imprime ce code dans le QWebView, il n'affiche pas correctement les symboles spéciaux (comme les umlauts allemands ou les lettres russes). Cependant, si j'enregistre le code généré dans un fichier HTML, Firefox s'ouvre affiche correctement ces caractères.

Le HTML généré contient <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> étiquette.

J'ai déjà essayé de définir un codec pour les chaînes, de convertir la chaîne en différents formats et de jouer autour du QByteArray lui-même. J'utilise QT 4.7.3. pour Windows Desktop avec Mingw 4.4.

Je suppose que je manque un point important dans l'histoire de l'encodage, et je serais reconnaissant pour toute aide! Le problème est vraiment ennuyeux et m'empêche de terminer mon idée! Merci!

Était-ce utile?

La solution

QXmlStreamWriter peut très bien écrire à QString directement (car il a été introduit dans QT 4.3), pas besoin d'ajouter les chances supplémentaires de se tromper avec un encodage avec un QByteArray.

Par exemple, cet extrait (trivial) fonctionne très bien (le fichier source est codé dans 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();
}

Sans plus de détails sur votre problème (extraits de code et captures de données - votre encodage de données source n'est peut-être pas ce que vous pensez qu'il est), ne peut pas aider beaucoup plus que cela.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top