2008-10-01 54 views

回答

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的。

+0

writer.Settings.Encoding是只读的 – 2008-10-01 19:18:35

0

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

0

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

2

类帖子的组合,这样也许东西:


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

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

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

这让我怀疑,无论您遇到的问题是什么,它都可能不是由BOM导致的。如果是我,我会多挖掘一下,期望真正的问题在别的地方。

3

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

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

5

轻微国防部克里斯威翰的回答。

不能修改编码一旦创建的XmlWriter,但使用XmlWriterSettings创建的XmlWriter时,你可以将它设置

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

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