XDocument和BOM(字节顺序标记)的问题

时间:2008-10-01 18:42:42

标签: .net xml linq-to-xml

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

7 个答案:

答案 0 :(得分:9)

如果您使用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,而不使用字节顺序标记。

答案 1 :(得分: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); 

答案 2 :(得分:3)

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

建议using(XmlWriter...) {...}改变克里斯的建议

答案 3 :(得分:2)

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


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

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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