Загрузить XMLDocument из байтового массива (необязательно содержащий символы BOM)

StackOverflow https://stackoverflow.com/questions/2192351

  •  25-09-2019
  •  | 
  •  

Вопрос

Я видел несколько постов здесь, так что о загрузке XML-документов из некоторых источников данных, где данные имеют запатентованную преамбуру Microsoft UTF-8 (например, Вот этот).
Тем не менее, я не могу найти элегантное (и работающую!) Решение, которое не включает в себя полосащие персонажи СБ вручную.

Например, есть Этот пример:

byte[] b = System.IO.File.ReadAllBytes("c:\\temp_file_containing_bom.txt");
using (System.IO.MemoryStream oByteStream = new System.IO.MemoryStream(b)) {
    using (System.Xml.XmlTextReader oRD = new System.Xml.XmlTextReader(oByteStream)) {
        System.Xml.XmlDocument oDoc = new System.Xml.XmlDocument();
        oDoc.Load(oRD);
        Console.WriteLine(oDoc.OuterXml);
        Console.ReadLine();
    }
}

... Но он все еще продолжает бросать исключение «Неверные данные».

Моя проблема в том, что у меня есть огромный байтовый массив, который иногда Содержит спецификации, а иногда это не так. Мне нужно загрузить его в XMLDocument. И я не верю, что я тот, кто должен заботиться о байтах "помощника".

Это было полезно?

Решение

Этот спектр не является «запатентованным». Он записан в спецификациях XML. Только старая версия Java (1.4) имеет проблему с этим. Это довольно юмористический, если у вас взрываются технологии MS.

Используйте буферизованный входной поток, чтобы отфильтровывать соскучений, нажимая первый символ, если он не первый символ последовательности BOM.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top