Загрузить XMLDocument из байтового массива (необязательно содержащий символы BOM)
-
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.