Carico XMLDocument da matrice di byte (opzionalmente contenente caratteri BOM)
-
25-09-2019 - |
Domanda
Ho visto diversi posti qui su SO su documenti XML di carico da una sorgente dati in cui i dati sono UTF-8 preambolo di Microsoft proprietario (per esempio, questo ).
Tuttavia, non riesco a trovare un elegante (e di lavoro!), Soluzione che non comporta striping fuori caratteri BOM manualmente.
Per esempio, v'è questo esempio :
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();
}
}
... ma conserva ancora gettare "dati non validi" eccezione.
Il mio problema è che ho un enorme array di byte che a volte contiene la distinta base e, a volte non è così. Ho bisogno di caricarlo in XMLDocument. E non credo che io sono colui che deve prendersi cura per i byte "helper".
Soluzione
Che BOM non è più 'proprietaria'. E 'scritto nelle specifiche XML. Solo vecchia versione di Java (1.4) hanno un problema con esso. E 'piuttosto divertente se hai la tecnologia MS esplodere.
Utilizzare un flusso di input buffer per filtrare la distinta spingendo indietro il primo carattere se non è il primo carattere della sequenza BOM.