Загрузка XML с кодировкой UTF 16 с использованием XDocument - PullRequest
38 голосов
/ 31 декабря 2010

Я пытаюсь прочитать XML-документ, используя метод XDocument.но я получаю сообщение об ошибке, когда XML имеет

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

Когда я удалил кодировку вручную. Это прекрасно работает.

Я получаю сообщение об ошибке " Нет метки порядка байтов Unicode.Невозможно переключиться на Unicode."

Я попытался найти и попал сюда ->

Почему происходит сбой C # XmlDocument.LoadXml (string), когда заголовок XMLвключено?

Но не смог решить мою проблему.

Мой код:

XDocument xdoc = XDocument.Load(path);

Есть предложения ??

спасибо.

Ответы [ 3 ]

58 голосов
/ 31 декабря 2010

Похоже, что файл, который вы пытаетесь прочитать, не закодирован как Unicode. Вы можете повторить поведение, пытаясь открыть файл, закодированный как ANSI, с кодировкой в ​​файле XML, заданной как utf-16.

Если вы не можете гарантировать, что файл закодирован надлежащим образом, вы можете прочитать файл в поток (позволяя StreamReader определить кодировку), а затем создать XDocument:

using (StreamReader sr = new StreamReader(path, true))
{
    XDocument xdoc = XDocument.Load(sr);
}
9 голосов
/ 04 января 2011

Я попробовал и нашел другой способ сделать это !!

XDocument xdoc = XDocument.Parse(System.IO.File.ReadAllLines(path));
6 голосов
/ 29 августа 2012

Этот код:

System.IO.File.ReadAllLines(path)

возвращает массив строк. Правильный код:

System.IO.File.ReadAllText(path)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...