Das #248 ist eh falsch, da das der
Ansi Code des "ö" ist, also nicht UTF-8.
Das stimmt so nicht. Die &-Codierung ist unabhängig von dem angegebenen Encoding. Das wird nur für die Interpretation der einzelnen Bytes als Zeichen verwendet. So wird in UTF-8 das "ö" durch die zwei Bytes c3 b6 dargestellt wird. Im Gegensatz dazu ist die &-Codierung unabhängig vom Encoding. Das "ö" kann also in allen Encodings als "&+#246;" (das + bitte wegdenken) angegeben werden. Nötig ist es allerdings nur bei Encodings die es nicht selbst unterstützen. Folglich kann bei UTF-8 auch direkt das "ö" verwendet werden.
Wäre der Code #246 falsch, hätten wir nicht dieses Ergebnis bekommen:
Oje. Und was stimmt nun? Beides?
Weil wenn ich das mache:
Delphi-Quellcode:
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;
Ist bei beiden Varianten s "'Dies ist ein Umlaut: ö.'"
Die Verwirrung kehrt zurück....
xml1.xml:
Code:
<?
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>'
xml2.xml:
Code:
<?
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>'
(ohne Leerzeichen nach dem &)