Pergunta

Eu já vi várias postagens aqui sobre o carregamento de documentos XML de alguma fonte de dados em que os dados possuem o preâmbulo proprietário UTF-8 da Microsoft (por exemplo, Este).
No entanto, não consigo encontrar uma solução elegante (e funcionando!) Que não envolve disputar personagens de bombeiros manualmente.

Por exemplo, existe este exemplo:

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();
    }
}

... mas ainda continua lançando a exceção "dados inválidos".

Meu problema é que tenho uma enorme matriz de bytes que as vezes contém o nascido e às vezes não. Eu preciso carregá -lo no XMLDocument. E não acredito que sou eu quem tem que cuidar dos bytes "ajudantes".

Foi útil?

Solução

Essa BOM não é mais 'proprietária'. Está escrito nas especificações XML. Somente a versão antiga do Java (1.4) tem um problema com ele. É muito engraçado se você tem a tecnologia MS explodindo.

Use um fluxo de entrada em buffer para filtrar o Bom, pressionando o primeiro caractere, se não for o primeiro caractere da sequência BOM.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top