在save()之后在我的XML文件的开头获得""

Rem*_*emy 31 .net c# xml .net-4.0 winforms

我用C#打开一个现有的XML文件,然后我替换那里的一些节点.一切正常.在我保存之后,我在文件的开头得到以下字符:

  (EF BB BF in HEX)
Run Code Online (Sandbox Code Playgroud)

整个第一行:

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
Run Code Online (Sandbox Code Playgroud)

该文件的其余部分看起来像普通的XML文件.简化的代码在这里:

XmlDocument doc = new XmlDocument();
doc.Load(xmlSourceFile);
XmlNode translation = doc.SelectSingleNode("//trans-unit[@id='127']");
translation.InnerText = "testing";
doc.Save(xmlTranslatedFile);
Run Code Online (Sandbox Code Playgroud)

我正在使用.NET 4.0 的C#Windows窗体应用程序.

有任何想法吗?为什么会这样做?我们可以以某种方式禁用它吗?它适用于Adobe InCopy,它不会像这样打开它.

更新:替代解决方案:

使用XmlTextWriter保存它也可以:

XmlTextWriter writer = new XmlTextWriter(inCopyFilename, null);
doc.Save(writer);
Run Code Online (Sandbox Code Playgroud)

dal*_*lle 40

它是UTF-8 BOM,实际上不鼓励使用Unicode标准:

http://www.unicode.org/versions/Unicode5.0.0/ch02.pdf

对于UTF-8既不要求也不建议使用BOM,但在使用BOM的其他编码形式或将BOM用作UTF-8签名的UTF-8数据转换的上下文中可能会遇到

您可以使用以下方法禁用它

var sw = new IO.StreamWriter(path, new System.Text.UTF8Encoding(false));
doc.Save(sw);
sw.Close();
Run Code Online (Sandbox Code Playgroud)


Dav*_*nan 6

这是一个UTF-8 字节顺序标记(BOM),是可以预期的.