【发布时间】:2008-10-01 18:42:41
【问题描述】:
有没有什么方法可以在没有 BOM 的情况下输出 XDocument 的内容?使用 Flash 读取输出时,会导致错误。
【问题讨论】:
标签: .net xml linq-to-xml
有没有什么方法可以在没有 BOM 的情况下输出 XDocument 的内容?使用 Flash 读取输出时,会导致错误。
【问题讨论】:
标签: .net xml linq-to-xml
如果您使用 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。
【讨论】:
对 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);
【讨论】:
我无法在上面添加评论,但如果有人使用 Chris Wenham 的建议,请记住处置作者!我花了一些时间想知道为什么我的输出被截断了,这就是原因。
建议 using(XmlWriter...) {...} 更改为 Chris 的建议
【讨论】:
某种帖子的组合,可能是这样的:
MemoryStream ms = new MemoryStream();
StreamWriter writer = new StreamWriter(ms, new UTF8Encoding(false));
xmlDocument.Save(writer);
【讨论】:
如上所述,这个问题有一股难闻的味道。
根据this support note,Flash 使用 BOM 来消除 UTF-16BE 和 UTF-16LE 之间的歧义,这是理所当然的。所以你不应该从 Flash 中得到错误:XDocument 生成 UTF16 编码的格式良好的 XML,Macromedia 声称 Flash 可以读取 UTF16 编码的格式良好的 XML。
这让我怀疑无论您遇到什么问题,它都可能不是由 BOM 引起的。如果是我,我会更深入地挖掘,并期望实际问题出在其他地方。
【讨论】:
您可以在输出上使用 System.Text.Encoding.Convert();只是要尝试的东西,而不是我测试过的东西。
【讨论】:
将其转换为字符串,然后自己删除标记。
【讨论】: