XDocument和BOM的问题(字节顺序标记)
时间:2020-03-06 14:59:30 来源:igfitidea点击:
没有BOM,有什么方法可以输出XDocument的内容吗?使用Flash读取输出时,会导致错误。
解决方案
我们可能会在输出上使用System.Text.Encoding.Convert()。就像尝试一样,不是我测试过的东西。
将其转换为字符串,然后自己删除标记。
如果要使用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。
某种类型的帖子组合,也许是这样的:
MemoryStream ms = new MemoryStream(); StreamWriter writer = new StreamWriter(ms, new UTF8Encoding(false)); xmlDocument.Save(writer);
如前所述,这个问题有难闻的气味。
根据此支持说明,Flash确实应该使用BOM来区分UTF-16BE和UTF-16LE。因此,我们不应从Flash中得到错误:XDocument生成了UTF16编码的格式正确的XML,Macromedia声称Flash可以读取UTF16编码的格式良好的XML。
这使我怀疑我们遇到的问题是不是BOM造成的。如果是我,我会挖掘更多,并期望实际问题出在其他地方。
我无法在上面添加评论,但是如果有人使用克里斯·文纳姆的建议,请记住抛弃作家!我花了一些时间想知道为什么我的输出被截断了,这就是原因。
建议将" using(XmlWriter ...){...}"更改为克里斯的建议
稍微修改一下克里斯·文纳姆的答案。
一旦创建了XmlWriter,就无法修改编码,但是可以在创建XmlWriter时使用XmlWriterSettings进行设置。
XmlWriterSettings settings = new XmlWriterSettings(); settings.Encoding = new System.Text.UTF8Encoding(false); XmlWriter writer = XmlWriter.Create("foo.xml", settings); myXDocument.WriteTo(writer);