在调用Xdocument.save之前应该跳过的字符

时间:2012-01-28 21:26:58

标签: c# .net xml-serialization

我有这个问题..我正在从客户端接收数据。使用套接字连接。但这并不重要。所有数据都使用XDocument对象存储在XML文件中。 有时在调用XDocument.Save(文件流)并向其传递具有特定字符或符号的数据时,我得到一个异常(无效的十六进制字符),这意味着XML文件不能有一些特殊字符? 如果是这样,我在哪里可以找到可以生成此类异常的特殊字符列表?

2 个答案:

答案 0 :(得分:4)

[0x0-0x1F]范围内的字符称为控制字符,不包括0x9,0xA,0xD,它们不能用于XML。

以下是XML specification

的引用
  

[定义:解析后的实体包含文本,一系列字符,   这可能代表标记或字符数据。] [定义:A   character是ISO / IEC 10646:2000规定的文本原子单位   [ISO / IEC 10646]。合法字符是制表符,回车符,换行符,   以及Unicode和ISO / IEC 10646的法律特征   A.1规范性参考文献中引用的这些标准是最新的   这份文件的编写时间。可以在这些字符中添加新字符   修订标准或新版本。因此,XML处理器   必须接受为Char指定的范围内的任何字符。 ]

     

角色范围

     

Char :: =#x9 | #xA | #xD | [#x20-#xD7FF] |   [#xE000-#xFFFD] | [#x10000-#x10FFFF] / *任何Unicode字符,   排除代理块,FFFE和FFFF。 * /

答案 1 :(得分:1)

@Darin给出的答案应该让你指出正确的方向。我将补充一点,如果你有一个xml开发工具,如XMLSpyStylus Studio,你可以快速确定有问题的字符。如果您没有这样的工具,可以使用WC3学校的在线xml验证器:

http://www.w3schools.com/xml/xml_validator.asp

这将检查xml是否格式正确,如果它包含无效字符,它将无法很好地形成。

更不可能的情况可能是xml文档指定的编码确实允许导致问题的字符。如果文档被指定为UTF-8(可能是它),那么这可能不是问题。