[Bug in Qt]XML und Unicode

Alles rund um die Programmierung mit Qt
Antworten
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

[Bug in Qt]XML und Unicode

Beitrag von BartSimpson »

Hallo ich erzeuge eine XML Datei mit Unicode Zeichen nur leider werden die UTF Zeichen unter Firefox und IE nicht richtig dargestellt.
Hier ein Auszug der erzeugten XML Datei.
<!DOCTYPE Kurzwahlnummern>
<Kurzwahlnummern>
<Speicherplätze gesamt="200" benutzt="3" />
<Eintrag>
<Beschreibung>Mailbox abhören</Beschreibung>
<Rufnummer>49900</Rufnummer>
<Nummerparameter NPI="0" TON="2" />
</Eintrag>
<Eintrag>
<Beschreibung>Mailbox ein</Beschreibung>
<Rufnummer>49900</Rufnummer>
<Nummerparameter NPI="0" TON="2" />
</Eintrag>
<Eintrag>
<Beschreibung>ADAC Pannenhilfe</Beschreibung>
<Rufnummer>49900</Rufnummer>
<Nummerparameter NPI="0" TON="2" />
</Eintrag>
</Kurzwahlnummern>
Diese Zeilge geht schief:
<Beschreibung>Mailbox abhören</Beschreibung>
wo hingegen
<Speicherplätze gesamt="200" benutzt="3" />
funktioniert.
Was muss geänder werden, damit es geht?
Wo muss man sagen das, die Inhalte UTF sind??

Code: Alles auswählen

QDomElement Wurzel = XML.createElement("Kurzwahlnummern");
QDomElement Speicherplatz= XML.createElement("Speicherplätze");
Speicherplatz.setAttribute("gesamt",AnzahlDerSpeicherplaetze);
XML.appendChild(Wurzel);
Wurzel.appendChild(Speicherplatz);
QDomElement Eintrag=XML.createElement("Eintrag");
Wurzel.appendChild(Eintrag);
QDomElement Beschreibung=XML.createElement("Beschreibung");
QDomElement Rufnummer=XML.createElement("Rufnummer");
QDomElement Nummerparameter=XML.createElement("Nummerparameter");
QDomText BeschreibungText=XML.createTextNode("öäü");
QDomText RufnummerText=XML.createTextNode("49900");
Nummerparameter.setAttribute("TON",2);
Nummerparameter.setAttribute("NPI",0);
Eintrag.appendChild(Beschreibung);
Eintrag.appendChild(Rufnummer);
Eintrag.appendChild(Nummerparameter);
Beschreibung.appendChild(BeschreibungText);
Rufnummer.appendChild(RufnummerText);
QFile Datei("text.xml");
Datei.open(QIODevice::WriteOnly|QIODevice::Truncate);	
QTextStream Strom(&Datei);
Strom<<XML.toString();
Strom.flush();
Datei.close();
Zuletzt geändert von BartSimpson am 6. August 2006 19:42, insgesamt 1-mal geändert.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Du musst als Doctype UTF8 Dokument setzen.

Wobei es mit dem Umlauten irgendwie seltsam ist, ich weiß das zwar nicht so ganz genau, wie das nun ist, aber ich weiß das die Konvertierten XML Umlaute immer gehen also

Code: Alles auswählen

& # 2 5 2 ;
für ü usw (ohne Leerzeichen).

Wäre allerdings auch dankbar, wenn das hier einmal jemand als Gesamtpaket erklären könnte, wie und warum das mit den Umlauten wie zu funktionieren hat.

Mehr ein XML Thema als ein Qt Thema aber egal.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Nur wie es gibt zwar ein QDomDocument.doctype () aber kein
setDoctype ()???
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

nur leider klappt das nicht:(
Der Fehler bleibt.
Verstümmelte Zeichen im Firefox und Fehlermeldung beim IE::(
Es sieht so aus als ob die Texte nicht als UTF gespeichert werden.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

So jetzt habe ich mir die Sache mal im Hexeditor angeschaut.
Und muss sagen sehr merkwürdig.
Hier das Beispiel:
<Speicherplätze gesamt="200" benutzt="3" />
<Eintrag>
<Beschreibung>Mailbox abhören</Beschreibung>
<Rufnummer>49900</Rufnummer>
das ö bei anhören wird korrekt mit C3 B6 codiert.
Aber das ä bei Speicherplätze wird als C3 83 C2 A4 codiert:(
Hat da jemand eine Idee?
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

So nach eigen Experiementen musste ist festellen, das es in der Windowsversion ein Bug ist. Denn unter Linux geht es.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Für alle die es interissert, die Tasknummer ist 125136.
Antworten