QDomDocument als UTF-16 in eine Datei schreiben. [gelöst]

Verschiedenes zu Qt
Antworten
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

QDomDocument als UTF-16 in eine Datei schreiben. [gelöst]

Beitrag von archer »

Hallo,
ich möchte eine XML Datei codiert als UTF-16 wegschreiben. Mein Code
dazu sieht folgendermaßen aus:

Code: Alles auswählen

FctResult CBaseXml::write(QIODevice* apDevice)
{
   const int   IdentSize = 2;   
   QTextStream Out;
   
   Out.setDevice(apDevice);   
   Out.setCodec(QTextCodec::codecForName("UTF-16"));
   
   Out << "<?xml version=\"1.0\" encoding=\"UTF-16\" standalone=\"yes\"?>\n";
   _DomDoc.save(Out, IdentSize);   
   
   return FCT_SUCCESS;
} 
Nur leider scheint das so nicht zu funktionieren.
Kann mir da jemand weiterhelfen?

Mfg
archer
Zuletzt geändert von archer am 4. Februar 2008 11:22, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Eventuell deswegen 'If QTextStream operates on a string, this function does nothing.' ?

Mhhh
Eventuell erst den QTextStream in einen QString umwandeln (http://doc.trolltech.com/4.0/qtextstream.html#string) und dann per QString::utf16() speichern? Ist zwar irgendwie umständlich, aber was wil man machen?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Querdenker
Beiträge: 99
Registriert: 1. Dezember 2005 17:44
Wohnort: Karlsruhe

Beitrag von Querdenker »

Hi,

habe ich gestern auch gefragt. Es steht eine Lösung am Ende der Diskus.
Du must nur UTF-8 in UTF-16 ändern.
Querdenker
Beiträge: 99
Registriert: 1. Dezember 2005 17:44
Wohnort: Karlsruhe

QTableWidget und Evens

Beitrag von Querdenker »

sry - falscher Eintrag :(
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Beitrag von archer »

Ich habe inzwischen mal

Code: Alles auswählen

FctResult CBaseXml::write(QIODevice* apDevice)
{
   const int   IdentSize = 2;   
   QTextStream Out;
   

   Out.setDevice(apDevice);   
   Out.setGenerateByteOrderMark(true); 
   //Out.setAutoDetectUnicode(false);
   Out.setCodec(QTextCodec::codecForName("utf16"));
   Out << "<?xml version=\"1.0\" encoding=\"UTF-16\" standalone=\"yes\"?>\n";
   
   //_DomDoc.save(Out, IdentSize);   
      
   return FCT_SUCCESS;
} 
versucht.

Das klappt auch. Mir scheint das

Code: Alles auswählen

_DomDoc.save(Out, IdentSize);  
wobri _DomDoc vom Typ QDomDocument ist, dieses wieder auf utf8 setzt.
Kann ich dem QDomDocument die Kodierung setzen?
[/quote]
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Hast du meinen Beitrag gelesen?
Eventuell deswegen 'If QTextStream operates on a string, this function does nothing.' ?
Und den Lösungsvorschlag?

/edit Rechtschreibung so früh am morgen... :roll:
Zuletzt geändert von Christian81 am 7. Februar 2006 08:07, insgesamt 1-mal geändert.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Beitrag von archer »

Hast du meinen Beitra gelesen?
Ja, habe ich gelesen. Werde ich mal Versuchen.
War nur noch mal auf der Suche nach dem Grund, deshalb der andere Versuch.
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Beitrag von archer »

Hallo Christian81,

hab jetzt mit diesem Code:

Code: Alles auswählen

FctResult CBaseXml::write(QIODevice* apDevice)
{
   QTextStream Out;   

   Out.setDevice(apDevice);   
   Out.setGenerateByteOrderMark(true); 
   Out.setAutoDetectUnicode(false);
   Out.setCodec(QTextCodec::codecForName("utf16"));
   Out << "<?xml version=\"1.0\" encoding=\"UTF-16\" standalone=\"yes\"?>\n";
   Out << _DomDoc.toString();

   return FCT_SUCCESS;
}
eine Lösung gefunden die zu funktionieren scheint.
In meinem Texteditor wird jetzt utf16 als Codierung angezeigt.
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Beitrag von archer »

Danke an alle für die Hilfe.
Antworten