XML Unicode 安全编码

4
我正在寻找一种使用#&233编码对XML文档进行编码的方法。
使用以下基本代码:
var xmlDoc = new XmlDocument();
xmlDoc.Load(@"D:\Temp\XmlDocBase.xml");
xmlDoc.Save(@"D:\Temp\XmlDocBaseCopy.xml");

我的 XML 文档经过:
<?xml version="1.0"?>
<Tag1>
  <comment>entit&#233;</comment>
</Tag1>

to

<?xml version="1.0"?>
<Tag1>
  <comment>entité</comment>
</Tag1>

问候。

XML在这两种情况下都是有效的。您想使用字符实体而不是实际字符的特定原因吗? - Oded
这是与文档生成工具(OWL-protégé的附加组件)进行交互,当XML处于第二种格式时,该软件会生成À@样式字符。但你说得对,两个XML都是有效的XML。 - Alexandre Rondeau
2个回答

5
你可以强制使用不支持所有Unicode字符(即ASCII)的编码。结果,写入器将被强制使用实体。
    XmlDocument doc = new XmlDocument();
    doc.LoadXml("<Tag1><comment>entit&#233;</comment></Tag1>");

    var writer = XmlTextWriter.Create(
        @"c:\temp\o.xml",
        new XmlWriterSettings { Encoding = System.Text.ASCIIEncoding.ASCII });
    doc.Save(writer);

结果:

<?xml version="1.0" encoding="us-ascii"?><Tag1><comment>entit&#xE9;</comment></Tag1>

2

您可以在字符串上调用HttpUtility.HtmlEncode。

return HttpUtility.HtmlEncode("entité");

返回entit&#233; HttpUtility 是 System.Web 的一部分。

在XML中,它是一个字符引用。因为&会被再次转义,所以您不能直接在XML API中使用该字符串。 - Joey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接