2012-02-08 57 views
0

我们正在解析包含用户信息(如姓名,年龄等)的xml文件。但用户来自世界各地,我们需要在xml中使用不同的字符集。例如,有名称为“Sikl¢si”的用户。如果我设置xml编码UTF-8,c#xmldocument对象会在xml加载时抛出异常。我将编码更改为iso-8859-9,现在正在工作。但是,如果我们有另一个不在iso-8859-9中的有趣的字符,它将再次成为问题。这个问题的最终解决方案是什么?适用于多国解决方案的Xml编码

回答

-1

使它成为UTF-32,它将覆盖其中的大部分。有关UTF的更多信息,请访问this

+0

不,它不工作。我认为XmlDocument不知道UTF-32。它会在根级别提供错误消息:根级别的数据无效。第1行,第40位 – londondev 2012-02-08 12:24:09

+1

UTF-32将覆盖您可能需要的所有可能的字符,但UTF-16和UTF-8也会覆盖。没有理由为什么UTF-32可以工作,而UTF-8不能。 – svick 2012-02-08 14:04:05

3

最终的解决方案是首先知道用什么编码来编码文件。一个XML文件应该说明它在XML声明中使用的编码(例如<?xml charset="UTF-8" ?>)。如果没有,那么文档应该是UTF-8或UTF-16(并且它们之间的区别可以自动检测)。

您的XML解析器应该根据XML文件中的信息透明地处理编码。

如果您正在接收不会解析的文档,那么问题首先在于它是如何生成的。你应该拒绝他们,并告诉提交的修复编码。 (请注意,任何Unicode编码都可以处理您可能需要的任何字符(以及您不需要的大量数字)。问题是文档不是UTF-8,不是UTF-8 -8不能处理正在使用的字符)。

+0

实际上,我们是从数据库生成XML文件。因此,没有关于用户需要的字符集信息。我不知道该怎么办。 – londondev 2012-02-08 12:09:28

+1

将数据库中的所有数据转换为UTF-8,并确保修改它的所有内容都保持为UTF-8。尝试从当前损坏状态恢复时,您可能必须执行大量手动检查。 – Quentin 2012-02-08 13:32:24

相关问题