尽管在UTF-8中编写XML,但仍在XmlElement中转义Unicode字符串

对于给定的XmlElement ,我需要能够将内部文本设置为Unicode字符串的转义版本,尽管文档最终以UTF-8编码。 有没有办法实现这个目标?

这是代码的简单版本:

 const string text = "ñ"; var document = new XmlDocument {PreserveWhitespace = true}; var root = document.CreateElement("root"); root.InnerXml = text; document.AppendChild(root); var settings = new XmlWriterSettings {Encoding = Encoding.UTF8, OmitXmlDeclaration = true}; using (var stream = new FileStream("out.xml", FileMode.Create)) using (var writer = XmlWriter.Create(stream, settings)) document.WriteTo(writer); 

预期:

 ñ 

实际:

 ñ 

直接使用XmlWriter并调用WriteRaw(text)可以正常工作,但我只能访问XmlDocument ,并且稍后会进行序列化。 在XmlElementInnerText&转义为& 正如预期的那样,设置Value会抛出exception。

是否有某种方法可以将XmlElement的内部文本设置为转义的ASCII文本,而不管最终使用的编码是什么? 我觉得我必须遗漏一些明显的东西,否则就是不可能。

如果您要求XmlWriter生成ASCII输出,它应该为您提供所有非ASCII内容的字符引用。

 var settings = new XmlWriterSettings {Encoding = Encoding.ASCII, OmitXmlDeclaration = true}; 

输出仍然是有效的UTF-8,因为ASCII是UTF-8的子集。