5

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

4

7 回答 7

9

如果您使用 XmlWriter 编写 XML,则可以将 Encoding 设置为已初始化的编码以省略 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。

于 2008-10-01T19:07:26.920 回答
5

对 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); 
于 2010-06-24T08:22:16.020 回答
3

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

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

于 2009-02-27T11:08:59.687 回答
2

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


MemoryStream ms = new MemoryStream();
StreamWriter writer = new StreamWriter(ms, new UTF8Encoding(false));
xmlDocument.Save(writer);
于 2008-10-01T19:29:16.757 回答
1

如前所述,这个问题有难闻的气味。

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

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

于 2008-10-02T19:58:57.223 回答
0

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

于 2008-10-01T19:00:13.300 回答
0

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

于 2008-10-01T19:03:37.210 回答