![]() |
XML: Text mit Umlaut in Node schreiben
Bitte um Entschuldigung für die möglicherweise triviale Frage. Auch die Suche hier hat viele XML Ergebnisse geliefert aber nicht offensichtlich für mein Problem.
Ganz einfach:
Delphi-Quellcode:
In sXml würde ich jetzt erwarten:
var
XMLDoc: IXMLDocument; RootNode, ErrNode: IXMLNode; sXml: UTF8String; begin CoInitialize(Nil); Try XmlDoc:= NewXmlDocument; XmlDoc.Options:= [doNodeAutoIndent]; XmlDoc.Active:= True; RootNode:= XMLDoc.AddChild('lpr:error', Format('http://%s/lpr',['127.0.0.1'])); ErrNode:= XmlDoc.CreateElement('message',''); ErrNode.NodeValue:= 'Dies ist ein Umlaut: ö.'; RootNode.ChildNodes.Add(ErrNode); XMLDoc.Encoding:= 'utf-8'; XmlDoc.SaveToXML(sXml); Finally CoUninitialize; End;
Code:
drin ist aber
<?xml version="1.0" encoding="utf-8"?>
<lpr:error xmlns:lpr="http://127.0.0.1/lpr"> <message>Dies ist ein Umlaut: ö. </message> </lpr:error>'
Code:
Was ein ungültiges XML bedeuted. Ich habe bisher nur haufenweise XML gelesen oder ohne Umlaute geschrieben.
<?xml version="1.0" encoding="utf-8"?>
<lpr:error xmlns:lpr="http://127.0.0.1/lpr"> <message>Dies ist ein Umlaut: ö. </message> </lpr:error>' Irgendwo habe ich noch das gefunden:
Delphi-Quellcode:
sXml:= TEncoding.UTF8.GetString(TEncoding.ANSI.GetBytes(string(XmlDoc.Xml.Text)));
Das wirft aber den Fehler: --------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt test.exe ist eine Exception der Klasse EEncodingError mit der Meldung 'Keine Zuordnung für Unicode-Zeichen in der Multibyte-Zielcodeseite vorhanden' aufgetreten. Wo ist mein Denkfehler? |
AW: XML: Text mit Umlaut in Node schreiben
Versuch doch mal SaveToFile statt SaveToXML. Die Datei anschließend z.B. mit WordPad öffnen - Hauptsache eine App, die keine Ahnung von UTF8 hat. SaveToXML speichert ja auch in einem Unicode-String, den dir Delphi ggf. immer wieder mit sauberen Umlauten anzeigt.
|
AW: XML: Text mit Umlaut in Node schreiben
Was ich gerade bemerke. UTF8 codiert ist das XML mit "ö" korrekt. Korrekt?
@PapaSchlumpf: Das ist eigentlich schon die Lösung. UTF8 müssen die Umlaute nicht escaped werden? |
AW: XML: Text mit Umlaut in Node schreiben
Zitat:
|
AW: XML: Text mit Umlaut in Node schreiben
Bei XML hätte ich für das ö eigentlich dies erwartet:
Code:
ö
|
AW: XML: Text mit Umlaut in Node schreiben
Zitat:
Von mir aus kann man diesen nutzlosen Thread löschen. Danke trotzdem. |
AW: XML: Text mit Umlaut in Node schreiben
Interessanterweise hatte ich das gar nicht so geschrieben, wie das dann dargestellt wurde. Daher hier nochmal den Code mit einem Leerzeichen hinter dem &, damit das nicht aufgelöst wird:
Code:
& #246;
|
AW: XML: Text mit Umlaut in Node schreiben
Zitat:
Weil wenn ich das mache:
Delphi-Quellcode:
Ist bei beiden Varianten s "'Dies ist ein Umlaut: ö.'"var XMLDoc: IXMLDocument; Node: IXMLNode; s: String; begin XmlDoc:= TXmlDocument.Create(Nil); XmlDoc.LoadFromFile('c:xml1.xml'); // XmlDoc.LoadFromFile('c:xml2.xml'); Node:= XmlDoc.DocumentElement.ChildNodes.FindNode('message'); if Assigned(Node) then s:= Node.NodeValue; Die Verwirrung kehrt zurück.... xml1.xml:
Code:
xml2.xml:
<?xml version="1.0" encoding="utf-8"?>
<lpr:error xmlns:lpr="http://127.0.0.1/lpr"> <message>Dies ist ein Umlaut: ö. </message> </lpr:error>'
Code:
(ohne Leerzeichen nach dem &)
<?xml version="1.0" encoding="utf-8"?>
<lpr:error xmlns:lpr="http://127.0.0.1/lpr"> <message>Dies ist ein Umlaut: & #246;. </message> </lpr:error>' |
AW: XML: Text mit Umlaut in Node schreiben
Zitat:
|
AW: XML: Text mit Umlaut in Node schreiben
Du brauchst auch im HTML keine ¨. Das wird nur benötigt, wenn kein Charset angegeben wird. Das #248 ist eh falsch, da das der Ansi Code des "ö" ist, also nicht UTF-8. In diesem Fall müsste die Codierung des XML auf ISO-8859-1 gesetzt werden und dabei auch die Datei als ANSI 8 Bit gepeichert werden.
Wenn im HEADER des XML als Charset UTF-8 steht oder komplett fehlt (Standard ist bei XML UTF-8), muss auch das Dokument entsprechend als UTF-8 gespeichert werden, damit die Umlaute als UTF-8 codiert im File stehen, sonst kommt es zu ungültigen Zeichen oder Konvertierungsfehlern (UTF-8 Umwandlung zurück in Uniocode oder ANSI). Die HTML Entitäten für die Umlaute braucht es schon lange nicht mehr, weil dazu das Charset im Header verwendet wird. Im XML muüssen nur die Standardzeichen des XML-Formats umgewandelt werden. (& < > / = ", etc.) Beispiel: "Müller&Meier" -> "Müller&Meier" |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz