从字节数组加载XMLDocument(可选地包含BOM字符)

时间:2010-02-03 13:53:47

标签: xml encoding byte-order-mark

我在这里看过几篇关于从某些数据源加载XML文档的帖子,其中数据具有Microsoft专有的UTF-8前导码(例如,this one)。 但是,我找不到一个优雅(并且工作!)的解决方案,它不涉及手动去除BOM字符。

例如,有this example

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

...但它仍然不断抛出“无效数据”例外。

我的问题是我有一个巨大的字节数组,其中有时包含BOM,有时它不包含。我需要在XMLDocument中加载它。而且我不相信我是那个必须照顾“助手”字节的人。

1 个答案:

答案 0 :(得分:1)

该BOM不再是“专有”的。它是在XML规范中编写的。只有旧版本的Java(1.4)存在问题。如果你的MS技术爆炸式增长,它会非常幽默。

如果第一个字符不是BOM序列的第一个字符,请使用缓冲输入流过滤掉BOM。