1

我们有一部分应用程序,我们的用户可以通过定制的所见即所得组件创建包含 HTML、JavaScript 和 CSS 的对象。这些对象在某些时候被序列化,然后被反序列化。但是,由于我们的用户/客户遍布全球,他们有时会在反序列化过程中输入引起不满的字符。最近,我看到出现在来自中国用户的序列化 XML 中,后来由于 XML 是使用 MSXML2 通过一些 Java 代码加载而导致问题(在 .NET 和 System.Xml 中同样不是问题,但这是另一个问题)。我们目前坚持使用 MSXML2,因此需要单独解决。

一个建议是更改一些字段以序列化为 CDATA,而不是像现在这样的 HtmlTextAttribute。

我怎样才能做到这一点,它会对在这种变化之前序列化的数据产生影响吗?

4

1 回答 1

0

0x1D 是没有人使用的 ASCII 控制字符,所以看起来中国用户的输入使用了一些非 UTF-8 编码,而将其序列化为 XML 的代码错误地假设输入字节是 Unicode 代码点(并对其进行序列化作为字符实体引用)。

仅将其更改为 CDATA 将不起作用,因为序列化程序仍将输出 mojibake。

最简单的解决方法是确保客户端应用程序始终使用 UTF-8。

于 2012-12-22T21:37:13.017 回答