Seite 1 von 1

[gelöst] XML in UTF8 speichern?

Verfasst: 7. November 2008 14:13
von mathies
Hallo,

ich habe ein Config-XML-File welches in UTF8 geschrieben ist. Darin möchte ich Werte ändern und das auch wieder in UTF8 speichern. Egal was ich mache, wie z.B.:

Code: Alles auswählen

QByteArray newXml = domDocument.toString(4).toUtf8();

oder

domDocument.save(newXml, 4, QDomNode::EncodingFromDocument);
das Dokument wird immer im UTF16 Format gespeichert, welches das auszuführende Programm nicht unterstützt.

Wie bekomme ich das hin, dass das XML Dokument in UTF8 gespeichert wird?

Verfasst: 7. November 2008 15:08
von Christian81
Wenn Du

Code: Alles auswählen

QByteArray newXml = domDocument.toString(4).toUtf8(); 
machst ist in QByteArray *immer* eine utf-8 kodierte Zeichenkette. Du speicherst sie wohl nur falsch.

Verfasst: 7. November 2008 15:15
von mathies
Hallo,

ich speichere über QFile und da habe ich keinerlei Einstellungen für Kodierungen gefunden

Code: Alles auswählen

QFile xmlfile( "config.xml" ); 
if(!xmlfile.open( QIODevice::ReadWrite ) ) 
{ 
    return false; 
} 

QByteArray newXml = domDocument.toString(4).toUtf8();
xmlfile.write(newXml);
xmlfile.close();
Was ändert da die Kodierung?

Verfasst: 7. November 2008 15:28
von Christian81
Das was da geschrieben wird ist utf-8 kodiert.

Verfasst: 7. November 2008 15:34
von mathies
Hallo,

naja, ich schau dann mal weiter. Die erste Zeile wird immer geändert in <?xml version='1.0' encoding='utf-16'?>.

Danke nochmal.

Verfasst: 7. November 2008 15:37
von Christian81
Da haben wir uns wohl falsch verstanden - Deine Beschreibung suggerierte dass die Datei utf-16 kodiert abgespeichert wird. Dies wird sie definitiv nicht. Es steht nur irgendwo im Text utf-16 drin.
Das musst Du wohl von Hand ändern.

Verfasst: 7. November 2008 15:40
von mathies
Aso,

dann muss ich das wohl machen. Das Programm was die Config verwendet stürzt sich wohl genau darauf.

Danke.

Verfasst: 7. November 2008 15:56
von Christian81
Ja - klar das Programm muss sich drauf verlassen was angegeben ist. Das Du das erst umwandelst ist ja nicht die Schuld von xml :)
Aber probiere mal gleich nach QByteArray zu wandeln -> QDomDocument::toByteArray() - da weiß dann QDomDocument dass es als utf8 speichern soll.