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 ich48 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.