AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

XML: Text mit Umlaut in Node schreiben

Ein Thema von taveuni · begonnen am 8. Aug 2022 · letzter Beitrag vom 9. Aug 2022
Antwort Antwort
Seite 1 von 2  1 2      
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
526 Beiträge
 
Delphi 11 Alexandria
 
#1

XML: Text mit Umlaut in Node schreiben

  Alt 8. Aug 2022, 13:10
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:
  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;
In sXml würde ich jetzt erwarten:

Code:
<?xml version="1.0" encoding="utf-8"?>
<lpr:error xmlns:lpr="http://127.0.0.1/lpr">
<message>Dies ist ein Umlaut: &ouml;.
</message>
</lpr:error>'
drin ist aber

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>'
Was ein ungültiges XML bedeuted. Ich habe bisher nur haufenweise XML gelesen oder ohne Umlaute geschrieben.

Irgendwo habe ich noch das gefunden:

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?
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
314 Beiträge
 
Delphi 12 Athens
 
#2

AW: XML: Text mit Umlaut in Node schreiben

  Alt 8. Aug 2022, 13:33
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.
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
526 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: XML: Text mit Umlaut in Node schreiben

  Alt 8. Aug 2022, 13:44
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?
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.

Geändert von taveuni ( 8. Aug 2022 um 13:46 Uhr) Grund: Antwort an PapaSchlumpf geändert
  Mit Zitat antworten Zitat
Papaschlumpf73

Registriert seit: 3. Mär 2014
Ort: Berlin
314 Beiträge
 
Delphi 12 Athens
 
#4

AW: XML: Text mit Umlaut in Node schreiben

  Alt 8. Aug 2022, 13:49
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?
Das sollte so passen, wie Delphi das auswirft. Wir erstellen so zig XML-Dateien auch mit Umlauten und Sonderzeichen usw. für andere Firmen. Konnte immer alles problemlos verarbeitet werden.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#5

AW: XML: Text mit Umlaut in Node schreiben

  Alt 8. Aug 2022, 13:53
Bei XML hätte ich für das ö eigentlich dies erwartet:
Code:
ö
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
526 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: XML: Text mit Umlaut in Node schreiben

  Alt 8. Aug 2022, 13:57
Bei XML hätte ich für das ö eigentlich dies erwartet:
Code:
ö
Stimmt. Grosse Verwirrung meinerseits. Ich hatte das Ergebnis aus dem Debugger in Notepad kopiert und dann gespeichert. Dann mit Notepad++ geöffnet und dieser hat gemeckert dass er eine ungültiges Zeichen "ö" im XML gefunden hat. Dies war aber natürlich weil ich die Datei nicht als UTF8 gespeichert hatte. Einen halben Tag vergeudet Mann Mann....

Von mir aus kann man diesen nutzlosen Thread löschen.
Danke trotzdem.
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#7

AW: XML: Text mit Umlaut in Node schreiben

  Alt 8. Aug 2022, 14:17
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
526 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: XML: Text mit Umlaut in Node schreiben

  Alt 8. Aug 2022, 14:30
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;
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 &)
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.

Geändert von taveuni ( 8. Aug 2022 um 14:42 Uhr) Grund: xml definition ergänzt
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.380 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: XML: Text mit Umlaut in Node schreiben

  Alt 8. Aug 2022, 15:49
In sXml würde ich jetzt erwarten:
Code:
...
<message>Dies ist ein Umlaut: &ouml;.
...
Meines Wissen ist die Kodierung mit &...; für HTML, aber nicht für XML vorgesehen. Direkt in UTF8 reicht IMHO.
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
629 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: XML: Text mit Umlaut in Node schreiben

  Alt 8. Aug 2022, 17:11
Du brauchst auch im HTML keine &uml;. 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&amp;Meier"

Geändert von Rolf Frei ( 8. Aug 2022 um 17:14 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz