Hallo,
Zitat von
himitsu:
Zitat von
nahpets:
Der IE kann die
XML-Seite problemlos einlesen, so dass ich mal von einem korrekten
XML ausgehe.
Der IE ist kein
XML Parser.
Da viele
HTML-Seiten total mit Fehlern gefüllt sind, arbeiten
HTML-Parser fehlerresistent und versuchen vieles "irgendwie" dennoch auszuwerten und anzuzeigen.
XML-Parser arbeiten da strickter ... was eigentlich nicht schlimm ist, da
XML "streng" geregelte Regeln/Spezifikationen besitzt.
$A0 ist
kein
UTF-8-Zeichen, also wird der Fehler korrekt angezeigt.
Die genannte
XML-Datei (
http://www.google.com/ig/api?weather...+Germany&hl=de ) besitzt keinen
XML-Header und ohne
sollte es laut
XML-Spec UTF-8 sein, aber hier sieht es mehr nach
ANSI aus.
Lösung: entweder nach UTF-8 konvertieren, bevor du es an TXMLDocument übergibst
oder du setzt einen
XML-Header (XMLInstructionNode) davor, welcher was von
ANSI sagt.
PS: Geh über den Stream, denn sonst bekommst du ab D2009 Probleme.
aktuell (bis D2007) könnte man es so versuchen
XMLDoc.XML.Text := '<?xml version="1.0" encoding="ISO-8859-1"?>' + IdHTTP1.Get(Trim(edURL.Text));
aber besser kommst du, du downloadest die Datei in einen Stream,
fügst vor den Dateidaten das '<?
xml version="1.0" encoding="ISO-8859-1"?>' ein (natürlich als
ANSI)
und nutzt dann LoadFromStream.
PSS: genau wegen sowas kann man bei himXML auch einen "Default"-Kodierung angeben ... also wenn die "angegebene" Kodierung nicht mit der tatsächlichen Kodierung übereinstimmt.
Stimmt, der IE selbst ist kein Parser, er benutzt den von Microsoft.
Bisher hat er mir noch keine
XML-Datei angezeigt, die einen Fehler enthielt. Bei
XML geht er anders vor als bei
HTML, bei
HTML darf geschludert werden, bei
XML nicht.
Die Datei von Google enthält am Anfang die 3 typischen Bytes für UTF-8-Dateien, auch wenn es nicht nochmal explizit woanders steht. Das mag auch ein Problem sein. Ultraedit erkennt die Datei jedenfalls als UTF-8, zumindest dann, wenn man beim IE sagt: "Quelltext anzeigen". Will' nicht ausschließen, dass es erst dann UTF-8 wird.
Nagut: Wenn man die Datei per
Indy holt, ist es ganz eindeutig kein UTF-8, aber die Hex A0 vor dem Prozentzeichen bleibt.