c# - 使用 C# .NET 处理 XML 中的禁用字符

标签 c# .net xml serialization xml-serialization

我有一个要序列化为 xml 的对象。其中一个属性中的值似乎包含十六进制字符 0x1E。我已尝试将 XmlWriterSettings 的编码属性设置为“utf-16”和“unicode”,但我仍然抛出异常:

生成 XML 文档时出错。 ---> System.InvalidOperationException:生成 XML 文档时出错。 ---> System.ArgumentException: '',十六进制值 0x1E,是无效字符。

有没有办法把这些字符放到xml中?如果不是,是否还有其他字符会导致问题?

最佳答案

XML 推荐标准(又名规范)http://www.w3.org/TR/2000/REC-xml-20001006概述哪些字符是不允许的,必须转义


2.2 字符

[定义:解析的实体包含文本,字符序列,可以表示标记或字符数据。] [定义:字符是 ISO/IEC 10646 [ISO/IEC 10646] 指定的文本的原子单位(另见 [ISO/IEC 10646-2000])。合法字符是制表符、回车符、换行符以及 Unicode 和 ISO/IEC 10646 的合法字符。A.1 规范性引用文献中引用的这些标准的版本在编写本文档时是最新的。可以通过修改或新版本将新字符添加到这些标准中。因此,XML 处理器必须接受为 Char 指定的范围内的任何字符。不鼓励使用 [Unicode] 第 6.8 节中定义的“兼容性字符”(另见 [Unicode3] 第 3.6 节中的 D21)。]

字符范围

[2]     Char       ::=      #x9 | #xA | #xD | [#x20-#xD7FF] |
            [#xE000-#xFFFD] | [#x10000-#x10FFFF]    
     /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */

将字符代码点编码为位模式的机制可能因实体而异。所有 XML 处理器必须接受 10646 的 UTF-8 和 UTF-16 编码;稍后将在 4.3.3 实体中的字符编码中讨论用于指示正​​在使用两者中的哪一个或使用其他编码的机制。


关于c# - 使用 C# .NET 处理 XML 中的禁用字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1647001/

相关文章:

c# - 在 C# 的 Windows 窗体中的 PictureBox 中显示 System.Windows.Media.Imaging.BitmapSource

.net - 在 WCF 中填充 PrimaryIdentity

javascript - 风格不适用

c# - linq 按子对象属性分组

c# - 如何使用C#代码和StreamWriter编写.exe文件?

c# - 如何使用 Moq 模拟 StackExchange.Redis ConnectionMultiplexer 类?

VB/VBA 中的 XML 反序列化

c# - 如何从 XML 文件中读取摘要

c# - Something.Text 包含两个字符串

c# - SpecExplorer 如何对 Microsoft.Modeling.Sequence 进行排序