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

问题描述 投票:4回答:1

对于给定的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);

预期:

<root>&#xF1;</root>

实际:

<root>ñ</root>

直接使用XmlWriter并调用WriteRaw(text)可以工作,但我只能访问XmlDocument,并且序列化稍后发生。在XmlElementInnerText像预期的那样逃离&&amp;,并且设置Value抛出异常。

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

c# .net xml unicode xml-serialization
1个回答
3
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.