![]() |
XML Document encoding
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:
wenn ich das encoding auf 'UTF-16' ändere wird es im XML eingetragen.
<?xml version="1.0"?>
<test/> Wie kann ich das ändern - warum ist das so?
Code:
Grüße
<?xml version="1.0" encoding="UTF-16"?>
<test/> Klaus |
AW: XML Document encoding
Macht es einen Unterschied, wenn du direkt in eine Datei schreibst?
String ist nunmal Unicode. |
AW: XML Document encoding
.. in der Datei wird das korrekte Encoding angezeigt.
Code:
.. ich dachte das Encondig sollte sicherstellen, dass die XML Daten richtig gelesen werden,
<?xml version="1.0" encoding="ISO-8859-15"?>
<test/> unabhängig davon wie die Daten transportiert werden. Grüße Klaus |
AW: XML Document encoding
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. |
AW: XML Document encoding
.. 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 |
AW: XML Document encoding
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. |
AW: XML Document encoding
Zitat:
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. |
AW: XML Document encoding
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. |
AW: XML Document encoding
So decodiere ich:
Delphi-Quellcode:
Kodieren geht genauso nur rückwärts.
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; |
AW: XML Document encoding
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.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:21 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