AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

XML Document encoding

Ein Thema von Klaus01 · begonnen am 20. Apr 2021 · letzter Beitrag vom 22. Apr 2021
Antwort Antwort
Seite 1 von 2  1 2   
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.582 Beiträge
 
Delphi 10.4 Sydney
 
#1

XML Document encoding

  Alt 20. Apr 2021, 15:08
Hallo,
ich frage mich warum das encoding nicht in das xml eingetragen wird:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  xmlDoc: IXmlDocument;
  s: String;
begin
  coInitialize(nil);
  xmlDoc := TXmlDocument.Create(nil);
  try
    xmlDoc.Active := true;
    xmldoc.Encoding := 'ISO-8859-15';
    xmlDoc.AddChild('test');
    xmlDoc.SaveToXML(s);
    memo1.Lines.Text := s;
  finally
    xmlDoc.Active := false;
    coUnInitialize;
  end;
end;
Code:
<?xml version="1.0"?>
<test/>
wenn ich das encoding auf 'UTF-16' ändere wird es im XML eingetragen.
Wie kann ich das ändern - warum ist das so?
Code:
<?xml version="1.0" encoding="UTF-16"?>
<test/>
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
469 Beiträge
 
#2

AW: XML Document encoding

  Alt 20. Apr 2021, 17:55
Macht es einen Unterschied, wenn du direkt in eine Datei schreibst?

String ist nunmal Unicode.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.582 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: XML Document encoding

  Alt 20. Apr 2021, 20:33
.. in der Datei wird das korrekte Encoding angezeigt.

Code:
<?xml version="1.0" encoding="ISO-8859-15"?>
<test/>
.. ich dachte das Encondig sollte sicherstellen, dass die XML Daten richtig gelesen werden,
unabhängig davon wie die Daten transportiert werden.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
372 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: XML Document encoding

  Alt 21. Apr 2021, 19:48
Das Encoding besagt in welchem Econding die Daten im File gespeichert sind. Hast du also Texte mit Umlauten und Encoding="ISO-8859-15" müssen diese im gleichen Encoding gepseichert sein, wie du da angibst. Soweit ich weiss macht das XML Doc das dann automatisch für dich, bin mir hier aber nicht zu 100% sicher. Ist leider schon einige Zeit her, seit ich zuletzt mit dem XML Doc Klassen gearbeitet habe. Per Default ist UTF-8 übrignens der Standard bei XML Files ohne Encoding Header.

Was ist denn nun eigentlich dein Problem genau? Du sagst ja selber im letzten Post, dass das Encoding da ist.

Geändert von Rolf Frei (21. Apr 2021 um 19:51 Uhr)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.582 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: XML Document encoding

  Alt 21. Apr 2021, 20:12
.. nun ich muss die xml Daten als String/Widestring weitergeben. Da ist nur UTF-8 oder UTF-16 möglich.
Egal welches Encoding als XML Attribute eingestellt wurde.

.. oder ist nur der welcher als letzte Instanz die Daten abspeichert für das korrekte Encoding zustämdig?
Dann hätte ich kein Problem.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
372 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: XML Document encoding

  Alt 22. Apr 2021, 13:02
Sorry aber nun verstehe ich nicht mehr so ganz was du genau machen willst. Was bedeutet das "letzte Instanz"? Beim Ertellen der XML musst du die Daten im glechen Enconding speichern, wie du da im XML Header angibst. Alles andere muss dich nicht mehr interessieren. Das Einlesend der XML muss sich dann darum kümmern, dass er die Daten entprechend dem Encoding Header entsprechend decodiert und einliest. Das alles mach aber in der Regel die XML Engine automatisch.

Wenn du Unicodetext übergeben willst, nutze UTF-8 als Enoding oder lass es komplett weg, da das der Default ist. Das XML Doc macht dann aus dinem String automatisch ein UTF-8 XML. UTF-16 brauchst du nicht und ISO-8859-15 ist ein ANSI Encoding und solltest du daher auch nicht nutzen, wenn du Unicode Daten hast.

Poste doch mal den Code den du bisher geschrieben hast.Dein leines Beissöiel von oben ist so eh nicht funktionsfähig, da du da xmlDoc.SaveToXML(s) drin hast und da ist s ein leerer String, müsste aber der Dateiname sein. Im Memo zeigst du dann das s and?! Um zu prüfen, ob die Datei richtig gespeichert ist, musst du sie in einem Editor laden, der dir anzeigen kann wie die Datei encodet ist. Wenn da UTF-8 angezeigt wird und alle Umlaute korrekt angezeigt werden ist alle richtig.

Geändert von Rolf Frei (22. Apr 2021 um 14:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.061 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: XML Document encoding

  Alt 22. Apr 2021, 14:20
UTF-16 brauchst du nicht und ISO-8859-15 ist ein ANSI Encoding und solltest du daher auch nicht nutzen, wenn du Unicode Daten hast.
Ich benötige das schon sehr oft.
Ich lade xml daten aus dem internet und bekomme es als ansi-codiert. in meinem programm wandle ich es in unicode zurück.
Die gleiche vorgehensweise muss ich durchführen um daten zu diesem server zu senden.
Da muss ich mein unicode erst wieder in ansi umwandeln damit es funktioniert.

Aber vielleicht habe ich dich auch falsch verstanden, dann ignoriere es.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
372 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: XML Document encoding

  Alt 22. Apr 2021, 14:32
So wie sich dein Beitrag liest, machst du das ganze XML Handling selber ohne XMLDocument. Ja, in dem Fall musst das alles selber hin und her codieren. Mit der TXMLDocument Klasse passiert das aber automatisch gemäss dem Encoding Header und da kommt hinten immer ein fertiger Delphi String retour. (Müsste mich irren, wenn das nicht so wäre)

In diesem Fall hier geht es aber um das Erstellen einer XML Datei mit TXMLDocument und nicht dem Einlesen, wenn ich es richtig verstanden habe.

Geändert von Rolf Frei (22. Apr 2021 um 14:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.061 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: XML Document encoding

  Alt 22. Apr 2021, 14:36
So decodiere ich:
Delphi-Quellcode:
var
   XmlDoc : OleVariant;
   Node : OleVariant;
begin
  XmlDoc:= CreateOleObject(Msxml2_DOMDocument);
  try
    XmlDoc.Async := False;
    XmlDoc.LoadXML({Das XML Document hier rein});
    if (XmlDoc.parseError.errorCode <> 0) then
     raise Exception.CreateFmt('Error in Xml Data %s',[XmlDoc.parseError]);
    Node:= XmlDoc.documentElement;
    if not VarIsClear(Node) then
      Result := TEncoding.UTF8.GetString(TEncoding.ANSI.GetBytes(string(XmlDoc.Text)));
  finally
     XmlDoc:=Unassigned;
  end;
end;
Kodieren geht genauso nur rückwärts.
Gruß vom KodeZwerg

Geändert von KodeZwerg (22. Apr 2021 um 14:39 Uhr)
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
372 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: XML Document encoding

  Alt 22. Apr 2021, 15:04
Ja so wie du das da direkt mit den MS XML Interfaces machst, musst du selber dafür sorgen, dass es richtig codiert. Die TXMLDocument Klasse würde dir diese Arbeit aber abnehmen und du könntest erst noch andere XML Engines nutzen, als die von MS.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 +2. Es ist jetzt 22:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf