2010-12-31 16 views
35

Próbuję odczytać dokument XML przy użyciu metody XDocument. ale otrzymuję błąd podczas xml maŁadowanie xml z kodowaniem UTF 16 przy użyciu XDocument

<?xml version="1.0" encoding="utf-16"?> 

Kiedy usunąłem kodowanie manually.It działa idealnie.

Dostaję błąd "Nie ma znak Unicode bajt kolejność nie można przełączyć na Unicode."

próbowałem poszukiwania i wylądowałem tutaj ->

Why does C# XmlDocument.LoadXml(string) fail when an XML header is included?

Ale nie mógł rozwiązać mojego problemu.

Mój kod:

XDocument xdoc = XDocument.Load(path); 

Wszelkie sugestie ??

dziękuję.

Odpowiedz

57

Wygląda na to, że plik, który próbujesz odczytać, nie jest zakodowany jako kod Unicode. Można replikować zachowanie, próbując otworzyć plik zakodowany jako ANSI z kodowaniem w pliku XML określonym jako utf-16.

Jeśli nie można zapewnić, że plik został poprawnie zakodowany, a następnie można odczytać pliku do strumienia (pozwalając StreamReader wykryć kodowanie), a następnie utworzyć XDocument:

using (StreamReader sr = new StreamReader(path, true)) 
{ 
    XDocument xdoc = XDocument.Load(sr); 
} 
+0

Mam dane wyjściowe XML jest pluć do html. Powyższe rozwiązanie nie działa dla mnie. Mam symbol praw autorskich (c) w moim tekście dokumentu xml i zawsze jest zniekształcony, gdy HTML przychodzi do przeglądarki. Próbowałem więc kodować (kodowanie XML kodu zakodowanego w HTML), ale dosłownie wychodzi tak jak w HTML. tj. & skopiować; w języku xml dosłownie wychodzi jako kopia &; zamiast oczekiwanego ©, aby przeglądarka mogła wyświetlić (c). –

8

Próbowałem, i znalazłem inny sposób robienia tego !!

XDocument xdoc = XDocument.Parse(System.IO.File.ReadAllLines(path)); 
+1

Wow! To jest nowe, właśnie wydano 4.5! (2012-08-15 - 5 dni temu) :) Sposób, aby pozostać na swoim szkielecie Sangram! –

+0

@ ArvoBowen- Naprawdę nie dostałem tego, co próbujesz powiedzieć .. –

+0

Z tego, co mogę powiedzieć, metoda XDocument.Parse() była nowa i właśnie wprowadzono do środowiska .Net 4.5. To wydano w dniu 2012-08-15, który w tym czasie był 5 dni temu ... To był po prostu dopełnienie, zwykle ludzie po prostu dziękują za dopełnienie. : P –

4

ten kod:

System.IO.File.ReadAllLines(path) 

zwraca tablicę ciągów. Poprawny kod to:

System.IO.File.ReadAllText(path) 
+1

w porządku. to inny sposób na zrobienie tego. ale readAllLines działa. –

+0

Najlepszy sposób na to, bez komplikacji. Dziękuję Ci. –

Powiązane problemy