C # Problem z odczytywaniem XML z znakami różnych kodowań
Miałem problem z odczytaniem XML. Rozwiązanie zostało znalezione, ale wciąż są pewne pytania. Niepoprawny plik XML jest zakodowany w UTF-8 i ma odpowiedni znak w nagłówku. Ale zawiera również znak kodowany w UTF-16 - „é”. Ten kod został użyty do odczytu pliku XML w celu sprawdzenia jego zawartości:
var xDoc = XDocument.Load(taxFile);
Wywołuje wyjątek dla określonego niepoprawnego pliku XML: „Niepoprawny znak w podanym kodowaniu. Linia 59, pozycja 104.” Szybka poprawka wygląda następująco:
XDocument xDoc = null;
using (var oReader = new StreamReader(taxFile, Encoding.UTF8))
{
xDoc = XDocument.Load(oReader);
}
Ten kod nie powoduje wyjątku dla niepoprawnego pliku. Ale znak „é” jest ładowany jako . Moje pierwsze pytanie brzmi „dlaczego to działa?”.
Inna kwestia przy użyciu XmlReader nie powoduje wyjątku, dopóki węzeł z „é” nie zostanie załadowany.
XmlReader xmlTax = XmlReader.Create(filePath);
I znowu pomaga trening z StreamReaderem. To samo pytanie. Wygląda na to, że rozwiązanie naprawcze nie jest wystarczająco dobre, bo pewnego dnia :) Może pojawić się kod XML zapisany w innym formacie i może być wykonany w niewłaściwy sposób. ALE Próbowałem przetworzyć plik XML w formacie UTF-16 i działał on dobrze (skonfigurowany na UTF-8).
Ostatnie pytanie brzmi, czy istnieją jakieś opcje dla XDocument / XmlReader, aby ignorować kodowanie znaków lub coś takiego.
Czekamy na twoje odpowiedzi. Z góry dziękuję