【问题标题】:Load XMLDocument from byte array (optionally containing BOM characters)从字节数组加载 XMLDocument(可选地包含 BOM 字符)
【发布时间】:2010-02-03 13:53:47
【问题描述】:

我在 SO 上看到了几篇关于从某些数据源加载 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 中加载它。而且我不相信我是必须照顾“帮助”字节的人。

【问题讨论】:

    标签: xml encoding byte-order-mark


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-06-23
      • 2020-05-29
      • 2012-08-18
      • 2017-02-13
      • 2013-03-06
      • 2020-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多