0

以下两个代码示例演示了我在未编码或解码“无效字符”时遇到的这个问题。

var elm = new XElement("foo", "\x12")
elm.ToString();
// ArgumentException: '', hexadecimal value 0x12, is an invalid character.

同样,解析

var elm2 = XElement.Parse("<foo>&#x0012;</foo>");
// XmlException: '', hexadecimal value 0x12, is an invalid character ..

这会在意外情况下导致意外异常 -

我怎样才能“解决”这个问题,使 XML 始终正确编码,无一例外?这个问题一般如何处理?

如果我必须在往返中保留这些“无效字符”,是否有一种标准方法可以在没有自定义编码(例如 base64)过程的情况下这样做?

此外,我惊讶地发现使用 XML 实体并没有解决问题 -不是编码编码吗?这是XML 版本之间的差异还是仅仅是一些基本的 XML 限制?


在这种情况下,可以简单地删除无效的 XML 字符,不希望为插入到 XElement 结构中的每个文本节点手动执行操作。

这不是 XElement 唯一的问题,尽管答案可能依赖于所使用的 XElement,因为在线验证站点在第二种情况下也会拒绝 XML。

4

1 回答 1

3

没有办法使用无效字符生成有效的 XML 文档,对于 XML 1.0,大约为 0-31,对于 XML 1.1,只有 0(但 System.Xml支持此标准)。完整列表可在规范或 Wikipedia中找到 XML 中的有效字符

处理这种本质上是“二进制数据”的信息的推荐方法是对其进行 Base64 编码。

于 2015-01-22T17:46:21.003 回答