Hechel... Ihr seit Klasse, Jungs, aber ich will seit 10 Minuten ne Antwort posten und komm nicht dazu...
Wenn ich den Beispielcode ausführe (mit dem Umlaute-
XML im CONST, also eigentlich *kein* UTF-8 ), dann liest LoadXMLData die Umlaute trotzdem ein, obwohl Umlaute ja eigentlich nach UTF-8 kodiert sein müssten. Na gut, mir egal, geht ja so. Aber jetzt:
Speichere ich das Objekt mit SaveToXML(MyString) wieder ab, sieht das Ganze so aus:
XML-Code:
<?
xml version="1.0" encoding="utf-8"?>
<Object
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Test>äöü</Test>
</Object>
Um das nun wieder per
LoadXMLData einzulesen, muss Ich das(den? die?) BOM vorne abschnippeln und (und das kapier ich einfach nicht) den String per
UTF8Decode erstmal dekodieren.
So, und das erklär mir mal einer, denn wozu steht denn im
XML 'encoding="utf-8"' drin, wenn ich das sowieso per Hand vorher durchführen muss? Dann kann ich das &/$%&-encoding doch gleich weglassen...
Ich dachte, ich kann sowas machen:
Delphi-Quellcode:
x := LoadXMLData (MyXMLString);
x.SaveToXML (sAnotherString);
x1 := LoadXMLData (sAnotherString);
// x und x1 sollen exakt die gleichen Daten enthalten. Stimmt nur nicht.
Mathematisch gesehen, sollte 'SaveToXML' die Umkehrfunktion von 'LoadXMLData' sein.
Das klappt nur nicht, sondern erst, wenn ich mir einen abbreche:
Delphi-Quellcode:
x := LoadXMLData (MyXMLString);
x.SaveToXML (sAnotherString);
// Dekodieren
sAnotherString := UTF8Decode(sAnotherString);
// BOM wegschnippeln
while sAnotherString[1]<>'<' do
sAnotherString:= copy(sAnotherString, 2, maxint);
x1 := LoadXMLData (sAnotherString);
// x und x1 enthalten exakt die gleichen Daten
Hab ich nun den Denkfehler, oder ist da was faul im Staate Dot.Net /
XML ?
Ich hab in meinem jungendlichen Leichtsinn echt gedacht, das
XML das alles für mich regelt...