XmlDocument.Load schlägt fehl, LoadXml funktioniert:

8

Bei der Beantwortung diese Frage , Ich bin auf eine Situation gestoßen, die ich nicht verstehe. Das OP hat versucht, XML von folgendem Speicherort zu laden: Ссылка

Die offensichtliche Lösung ist:

%Vor%

Dies schlägt jedoch mit

fehl
  

XmlException: Ungültiges Zeichen in der gegebenen Kodierung. Linie 1, Position 499.

Es scheint auf der à von Umidità zu ersticken.

OTOH, das folgende funktioniert gut:

%Vor%

Ich bin davon verblüfft. Kann jemand erklären, warum ersteres scheitert, aber letzteres gut funktioniert?

Insbesondere wird in der XML-Deklaration des Dokuments eine Kodierung weggelassen.

    
spender 21.09.2011, 09:16
quelle

2 Antworten

12

Das WebClient verwendet die Kodierungsinformationen in den Headern der HTTP-Antwort, um die richtige Kodierung zu bestimmen (in diesem Fall ISO-8859-1 , das ASCII-basiert ist, dh 8 Bit pro Zeichen)

Es sieht so aus, als ob XmlDocument.Load diese Information nicht verwendet und da die Kodierung auch in der XML-Deklaration fehlt, muss sie auf eine Kodierung raten und es falsch verstehen. Ein bisschen herumgrölen lässt mich glauben, dass UTF-8 gewählt wird.

Wenn wir wirklich technisch werden wollen, ist der Buchstabe "à", der in der ISO-8859-1-Codierung 0xE0 ist, aber das ist kein gültiges Zeichen in UTF-8 - speziell die binäre Darstellung dieses Zeichens ist:

%Vor%

Wenn Sie im UTF-8 Wikipedia-Artikel nachschauen, können wir sehen, dass dies einen Code anzeigt Punkt (dh Zeichen) bestehend aus insgesamt 3 Bytes, die das folgende Format haben:

%Vor%

Aber wenn wir uns das Dokument ansehen, sind die nächsten zwei Zeichen ":", was 0x3A und 0x20 in ISO-8859-1 ist. Das bedeutet, was wir tatsächlich erreichen:

%Vor%

Weder das 2. noch das 3. Byte der Folge haben 10 als die beiden höchstwertigen Bits (was auf eine Fortsetzung hinweisen würde), und daher macht dieses Zeichen in UTF-8 keinen Sinn.

    
Justin 21.09.2011, 09:25
quelle
2

Umidità string als Knoten-Innertext muss innerhalb & lt; ! [CDATA [Umidità]] & gt; Dies wird keinen Fehler in XmlDocument.Load geben.

    
Sagar Kadam 21.09.2011 09:56
quelle

Tags und Links