QTextStream und QDataStream

Alles rund um die Programmierung mit Qt
Antworten
darkshine
Beiträge: 102
Registriert: 20. August 2010 11:39

QTextStream und QDataStream

Beitrag von darkshine »

Ich habe eine XML-Datei eingelesen und dann einige Änderungen daran vorgenommen. Am Ende habe ich einen QString den ich in eine Datei schreiben möchte.

Code: Alles auswählen

QFile file("Test.ts");
file.open(QIODevice::WriteOnly);
         
QDataStream out(&file);	
out << xmlstring.toAscii();

file.close();

Dann schreibt er mir aber in die erste Zeile
Ef<?xml version='1.0' encoding='utf-8'?>

Woher kommen diese ersten vier Zeichen? In meinem String selber kommen Diese nicht vor.

Wenn ich stattdessen

Code: Alles auswählen

QFile file("Test.ts");
file.open(QIODevice::WriteOnly);
         
QTextStream out(&file);	
out << xmlstring;

file.close();
verwende, dann sind diese Zeichen verschwunden. Aber alle Sonderzeichen wie Ä usw werden falsch dargestellt.

Diese XML bringt mich noch zur Verzweiflung :(
darkshine
Beiträge: 102
Registriert: 20. August 2010 11:39

Beitrag von darkshine »

als Ergänzung: Vor dem "Ef" stehen noch 2 Leerzeichen. Deshalb 4 zusätzliche Zeichen aus dem "Nichts".

<?xml version='1.0' encoding='utf-8'?> ist das was ich erwarten würde.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: QTextStream und QDataStream

Beitrag von franzf »

XML == Text -> QTextStream
darkshine hat geschrieben:verwende, dann sind diese Zeichen verschwunden. Aber alle Sonderzeichen wie Ä usw werden falsch dargestellt.
WO zeigst du das an? Hoffentlich in einem UTF8-fähigen Texteditor. Ich bin mir zu 100% sicher, dass das nicht der Fall ist (wenn der Editor UTF8 kann, hast du die Datei mit einem anderen Encoding geladen).
darkshine
Beiträge: 102
Registriert: 20. August 2010 11:39

Beitrag von darkshine »

Vielen Dank!

in.setCodec("UTF-8");

Das war die Lösung.
Mein Problem war, dass ich es schon oft bei der Ausgabe gesetzt hatte.
out.setCodec("UTF-8");

Aber ich hatte wohl gestern ein Brett vorm Kopf und hatte es nie vor dem Einlesen gesetzt.
Antworten