【问题标题】:Issue with XDocument and the BOM (Byte Order Mark)XDocument 和 BOM(字节顺序标记)问题
【发布时间】:2008-10-01 18:42:41
【问题描述】:

有没有什么方法可以在没有 BOM 的情况下输出 XDocument 的内容?使用 Flash 读取输出时,会导致错误。

【问题讨论】:

标签: .net xml linq-to-xml


【解决方案1】:

如果您使用 XmlWriter 编写 XML,您可以将编码设置为已初始化的编码以省略 BOM。

EG:System.Text.UTF8Encoding 的构造函数接受一个布尔值来指定是否需要 BOM,所以:

XmlWriter writer = XmlWriter.Create("foo.xml");
writer.Settings.Encoding = new System.Text.UTF8Encoding(false);
myXDocument.WriteTo(writer);

将创建一个使用 UTF-8 编码且没有字节顺序标记的 XmlWriter。

【讨论】:

  • 你确定吗?我没有收到编译错误,文档说它不是只读的:msdn.microsoft.com/en-us/library/…
  • 我如何从这里得到一个字符串?
  • 你可以使用下面 Chris 的方法来写入 MemoryStream。
【解决方案2】:

对 Chris Wenham 的回答稍加修改。

XmlWriter 创建后无法修改编码,但可以在创建 XmlWriter 时使用 XmlWriterSettings 设置

XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = new System.Text.UTF8Encoding(false); 

XmlWriter writer = XmlWriter.Create("foo.xml", settings); 
myXDocument.WriteTo(writer); 

【讨论】:

    【解决方案3】:

    我无法在上面添加评论,但如果有人使用 Chris Wenham 的建议,请记住处置作者!我花了一些时间想知道为什么我的输出被截断了,这就是原因。

    建议 using(XmlWriter...) {...} 更改为 Chris 的建议

    【讨论】:

      【解决方案4】:

      某种帖子的组合,可能是这样的:

      
      MemoryStream ms = new MemoryStream();
      StreamWriter writer = new StreamWriter(ms, new UTF8Encoding(false));
      xmlDocument.Save(writer);
      

      【讨论】:

        【解决方案5】:

        如上所述,这个问题有一股难闻的味道。

        根据this support note,Flash 使用 BOM 来消除 UTF-16BE 和 UTF-16LE 之间的歧义,这是理所当然的。所以你不应该从 Flash 中得到错误:XDocument 生成 UTF16 编码的格式良好的 XML,Macromedia 声称 Flash 可以读取 UTF16 编码的格式良好的 XML。

        这让我怀疑无论您遇到什么问题,它都可能不是由 BOM 引起的。如果是我,我会更深入地挖掘,并期望实际问题出在其他地方。

        【讨论】:

          【解决方案6】:

          您可以在输出上使用 System.Text.Encoding.Convert();只是要尝试的东西,而不是我测试过的东西。

          【讨论】:

            【解决方案7】:

            将其转换为字符串,然后自己删除标记。

            【讨论】:

              猜你喜欢
              • 2011-10-30
              • 1970-01-01
              • 2017-01-28
              • 2011-04-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-05-22
              • 2021-10-25
              相关资源
              最近更新 更多