Jer*_*emy 6 .net c# xml serialization xml-serialization
我有一个对象,我正在序列化为xml.看来其中一个属性中的值包含十六进制字符0x1E.我已经尝试将XmlWriterSettings的Encoding属性设置为"utf-16"和"unicode"但我仍然会抛出异常:
这是生成XML文档的错误.---> System.InvalidOperationException:生成XML文档时出错.---> System.ArgumentException:'',十六进制值0x1E,是无效字符.
有没有办法让这些字符进入xml?如果没有,是否还有其他字符会导致问题?
XML建议书(又名规范)http://www.w3.org/TR/2000/REC-xml-20001006概述了不允许使用哪些字符,必须进行转义
[定义:解析的实体包含文本,一系列字符,可以表示标记或字符数据.] [定义:字符是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. */
Run Code Online (Sandbox Code Playgroud)
用于将字符代码点编码成位模式的机制可以在实体之间变化.所有XML处理器必须接受10646的UTF-8和UTF-16编码; 用于发信号通知两者中的哪一个正在使用或用于使其他编码发挥作用的机制将在后面的4.3.3实体中的字符编码中讨论.