C# 如果没有XML Prolog,如何保存XmlDocument?

C# 如果没有XML Prolog,如何保存XmlDocument?,c#,.net,xml,csproj,C#,.net,Xml,Csproj,在保存后以某种方式将csproj文件作为xml文件(xmlDocument)处理时,编码从UTF-8更改为ASCII。我找到的唯一解决方案是将StreamWriter与声明的编码一起使用。但这会在文件中添加一个头。 问题: 1.你知道这个问题的其他解决办法吗? 2.我可以离开吗 StreamReader sr = new StreamReader(projectFilePath, Encoding.UTF8); XmlDocument xmlCsproj = new XmlDocument();

在保存后以某种方式将csproj文件作为xml文件(
xmlDocument
)处理时,编码从UTF-8更改为ASCII。我找到的唯一解决方案是将
StreamWriter
与声明的编码一起使用。但这会在文件中添加一个头。 问题: 1.你知道这个问题的其他解决办法吗? 2.我可以离开吗

StreamReader sr = new StreamReader(projectFilePath, Encoding.UTF8);
XmlDocument xmlCsproj = new XmlDocument();
xmlCsproj.Load(sr);
sr.Close();

// Working on XML nodes (replace references paths)

StreamWriter sw= new StreamWriter(projectFilePath, false, Encoding.UTF8);
xmlCsproj.Save(sw);
sw.Close();
这应该行吗

var writer = new XmlTextWriter(projectFilePath, Encoding.UTF8)
{
    Formatting = Formatting.Indented
};
xmlCsproj.WriteContentTo(writer);
writer.Close();

首先,UTF8字符值在0-127范围内与US-ASCII值相同。无法确定csproj文件是否保存为US-ASCII或UTF8,除非该文件包含非英语文本,如非英语文件路径。这就是这里发生的事吗?即使如此,
XmlDocument.Save
在默认情况下也应该使用UTF8

您可以使用XmlWriter和XmlWriterSettings控制如何将XmlDocument写入流或文件。在这种情况下,您需要设置:


默认编码是UTF8。要更改它,您可以将设置为不同的值

您所指的标题是什么?如果是识别线,为什么要将其删除?请尝试删除该文件,然后再次运行程序。只有当代码更改编码时,编码才会更改。StreamWriter甚至不知道XM,它只是将字符串写入文件。发布你的代码。因为它显示了修订控制系统中的更改,尽管标题有更改,但并不总是有更改。当你说标题时,你是指BOM吗?字节顺序掩码?与前3个字节一样?@AdG
是标准的XML prolog,而不是标头。它是可选的,但所有XML序列化程序都会发出它。它是由
XmlDocument.Save
而不是StreamWriter创建的
XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;

var writer = XmlWriter.Create(projectFilePath, settings);
xmlCsproj.Save(sw);
sw.Close();