Qt - Kodierung



  • int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        QString s ="Hällo";
        QFile f("out.txt");
        f.open(QIODevice::WriteOnly | QIODevice::Text);
        QTextStream ts(&f);
        ts << s;
        f.close();
        return a.exec();
    }
    

    Wenn ich dieses Programm ausführe, welche Kodierung hat dann die entstehende Datei?
    Ich hab gedacht QStrings werden intern als UTF-8 gespeichert, aber wenn ich die Datei mit einem Hex-Editor unter Windows öffne,
    erhalte ich

    48 E4 6C 6C 6F

    Was Latin1 entspräche.

    Ich glaube dass unter Linux hingegen utf-8 herauskommt. Ich versteh das nicht so ganz



  • QString verwendet intern nicht utf-8 sondern utf-16 als codierung.
    Dass unter windows eine ANSI codepage variante rauskommt, könnte daran liegen, dass QTextStream standardmäßig in die lokale system kodierung konvertiert.



  • WIe kann ich dieses Verhalten beeinflussen?
    Also zB möchte ich nur UTF-8 erzeugen, wo muss ich das einstellen?

    Zum anderen:
    Wie kann ich nachsehen, was die lokale kodierung ist?



  • shisha schrieb:

    WIe kann ich dieses Verhalten beeinflussen?
    Also zB möchte ich nur UTF-8 erzeugen, wo muss ich das einstellen?

    Zum anderen:
    Wie kann ich nachsehen, was die lokale kodierung ist?

    Hast du dir mal die DOcu zu QTextStream angeschaut?
    Denn da gibt es folgendes: http://doc.qt.nokia.com/4.7/qtextstream.html#setCodec



  • Man nehme.

    int main(int argc, char *argv[])
    {
      QApplication a(argc, argv);
      QTextCodec *utf8Codec=QTextCodec::codecForName("UTF-8");
      QTextCodec::setCodecForCStrings(utf8Codec);
      QTextCodec::setCodecForLocale(utf8Codec);
      QTextCodec::setCodecForTr(utf8Codec);
    

    und speichere alles (Source, ...) in UTF-8.


Anmelden zum Antworten