我在这里看到了几篇关于从某些数据源加载 XML 文档的文章,其中数据具有 Microsoft 专有的 UTF-8 序言(例如, 这个).
但是,我找不到不涉及手动删除 BOM 字符的优雅(且有效!)的解决方案。

例如,有 这个例子:

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 中。而且我不相信我是那个必须照顾“帮助”字节的人。

有帮助吗?

解决方案

该 BOM 不再是“专有的”。它写在 XML 规范中。只有旧版本的 Java (1.4) 有问题。如果你的 MS 技术爆炸了,那真是太幽默了。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top