为什么许多XML序列化示例都会删除特定字符?

时间:2011-08-03 22:33:10

标签: c# character-encoding xml-serialization

这里的许多C#XML序列化示例都包含类似

的代码
xml = xml.Substring(xml.IndexOf(Convert.ToChar(60)));
xml = xml.Substring(0, (xml.LastIndexOf(Convert.ToChar(62)) + 1));

我知道这会丢弃<周围的任何(不可打印/无效)字符。和>,但为什么这些字符首先存在?

假设UTF16使用Encoding.Unicode和XmlTextWriter。

2 个答案:

答案 0 :(得分:2)

  

假设UTF16使用Encoding.Unicode和XmlTextWriter。

与构造XmlTextWriter一样,UTF格式并不是真正的玩家。如果XmlTextWriter传递给包含xml变量的StringReader,则问题可能存在于最初从磁盘读取xml的方式。

文本文件通常包含称为BOM(Byte Order Mark)的编码前导码。如果读取不正确,则会在文件内容之前出现几个“怪异”字符。

我希望您所拥有的代码是一个穷人尝试从错误读取的文本文件中删除BOM。

答案 1 :(得分:1)

据我所知,这只是Postel定律的一个例子,也就是所谓的鲁棒性原则。那里不应该有任何东西,但为了以防万一,我们不妨把它剥掉。

  

你发送的东西要保守;你接受的是自由的

http://en.wikipedia.org/wiki/Robustness_Principle

您可能还想检查XML规范,因为实际上可能需要忽略那些无关的文本而不仅仅是礼貌的便利