QT- Utf-8 codierte Textdatei schreiben
-
Hallo ich möchte eigentlich nur eine Datei anlegen und dort Utf-8 codiert Hällo reinschreiben,
folgnder Code liefert nicht das erwünschte Ergebnis:#include <QtCore/QCoreApplication> #include <QDir> int main() { QFile x("/home/kleopatra/test.txt"); x.open( QIODevice::ReadWrite); QString s("Hällo"); x.write(s.toUtf8()); return 0; }
wo liegt denn mein Fehler?
-
QTextStream out(&x); out.setCodec("UTF-8"); out << s;
-
Kanst du das etwas ausführlicher erklären?
1. warum läuft meins nicht
2. was machst du genau
3. gibt es alternativen?
-
Autsch, das funktioniert auch nicht so, ich erhalt stets:
Hällo
als Ausgabe statt Hällo
-
mit welcher Kodierung ist die Quelltextdatei abgespeichert?
Versuch probehalber mal das:
QTextStream out(&x); out.setCodec(QTextCodec::codecForLocale()); out << s;
-
Also die Datei existiert vorher noch nicht, soll also neu angelegt werden.
Ich arbeite unter Linux, wo UTF-8 doch eigentlich Standard sein sollte...
also hier die Ausgabe deines Vorschlags:
Hällo
im hex-editor:
48 C3 A4 6C 6C 6F
was meiner Meinung nach Utf-8 ist.
soweit recht gut, nun ein blick auf die Ausgabe von setCodec("UTF-8")
48 C3 83 C2 A4 6C 6C 6F
ich dachte ein ä wäre nur C3 A4 und nicht C3 83 C2 A4,
das ist meiner Meinung nach KEIN utf-8 obwohl es doch explizit eingestellt wird.Und nun bin ich gespannt auf Erklärungen ^^, denn ich kann es mir nicht erklären
-
nun, du hast tatsächlich als UTF-8 abgespeichert, soweit passts.
Du speicherst die Datei und aus 'ä' wird 'C3 A4'.
Jetzt gibst du diesen UTF8-String aber dem ASCII-Konstruktor des QStrings. Mit
setCodec("UTF-8")
lässt du das aber wieder als UTF-8 interpretieren. Und so wird ASCII 'C3 A4' UTF-8-codiert zu 'C3 83 C2 A4'
-
Ausweg?
irgendwie mit fromUtf8() ?
-
fromLatin1() sollte gehen.