非法字符的xml解析错误

时间:2010-06-28 23:50:35

标签: xml encoding

所以,我要求作为最后的手段,因为我完全没有想法。

我有一个Windows ASP.NET ASMX Web服务应用程序,它返回一个带有 - 的序列化Person对象 - 姓名,地址,电子邮件等...

但是xml中的一些属性编码非常奇怪,例如 - &#x1a(我不知道编码发生在哪里。我假设在序列化过程中)

googling those characters我看到它是“Windows-1252”编码。

在解析XML时发生问题,我发现,在1252编码的位置处出现“无效的unicode字符”的解析错误。

我怎样才能成功解析它?你建议什么解决方案?

1 个答案:

答案 0 :(得分:7)

解析器是正确的,无论生成什么序列化都是错误的。与大多数C0 / C1控制字符一样,它是无效的 - 实际上,更糟糕的是:格式不正确 - 将U+001A SUBSTITUTE放入XML 1.0文件(*),即使编码为字符引用例如

没有XML解析器会读取它,也不应该读取它。虽然你可以在将序列传递给解析器之前尝试过滤掉一些可怕的黑客攻击,但这种粗暴的黑客攻击对于一般情况不起作用。应修复序列化程序以停止生成它们。

实际上我不知道角色(通常用于标记古老可怕的操作系统中的文件结尾)是如何进入ASP.NET应用程序使用的数据集中的,但它似乎没有播放任何有效的在姓名,地址或电子邮件中的角色。也许您真的需要考虑清理数据。

(*:如果在XML 1.1文档中编码为字符引用,那将是合法的。如果您绝对必须通过XML往返控制字符,则必须使用XML 1.1。尽管这可能会导致兼容性问题较旧的XML解析器,你仍然不能使用U + 0000 NULL字符,因此你永远不会完全是二进制安全的。)