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
fehlXmlException: 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.
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:
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.
Umidità string als Knoten-Innertext muss innerhalb & lt; ! [CDATA [Umidità]] & gt; Dies wird keinen Fehler in XmlDocument.Load geben.
Tags und Links c# xmldocument load xmlexception