无法打开/读取包含重音字符的XML文件

4

我有一个XML属性包含重音字符:

 <TestCase Name="Canadian Addresses - Test Case" Description="Canadian Addresses - Test Case" OnOff="True" NegativeTest="False" RollbackDB="False" Performance="False" PerformanceSummary="False" TimesToExecute="1">

 <ProviderFacilitySearch_FindProviderFacility ProviderInfo="Dr Marc-André Kärcher Samuels Senior|10 Château du Feÿ Ave, North Building, North Sydney, NS  B2A 3L7 CANADA" />
 <ProviderFacilitySearch_ViewProviderFacility ProviderInfo="Dr Marc-André Kärcher Samuels Senior|10 Château du Feÿ Ave, North Building, North Sydney, NS  B2A 3L7 CANADA" />
 <ViewProvider_LocationName ExpectedLocationName="Kärcher Health Care" />
 <ViewProvider_ServicingAddress ExpectedServicingAddress="10 Château du Feÿ Ave|Central Building|North Sydney, NS  B2A 3L7|CANADA" />
 <ViewProvider_ExpandMailingAddress NA="" />
 <ViewProvider_MailingAddress ExpectedMailingAddress="10 Château du Feÿ Ave|Central Building|North Sydney, NS  B2A 3L7|CANADA" />
 <ViewProvider_ExpandBillingAddress NA="" />
 <ViewProvider_BillingAddress ExpectedBillingAddress="10 Château du Feÿ Ave|Central Building|North Sydney, NS  B2A 3L7|CANADA" />
 <ViewProvider_Close NA="" />
 <ProviderFacilitySearch_Cancel NA="" />
 <UserLogout/>
 </TestCase>

当我使用C#代码读取这个XML文件时,出现如下错误:

5/8/2013 2:39:03 PM 错误: System.Xml.XmlException: 给定编码中存在无效字符。第86行,第74个位置。 at System.Xml.XmlTextReaderImpl.Throw(Exception e) at System.Xml.XmlTextReaderImpl.Throw(String res, String arg) at System.Xml.XmlTextReaderImpl.InvalidCharRecovery(Int32& bytesCount, Int32& charsCount)

我甚至无法使用IE打开这个页面。

有没有办法解决这个问题呢?


7
听起来你的XML文件有问题 - 我怀疑它声明了一种编码,但实际上使用了另一种编码。你没有告诉我们这个文件来自哪里,所以很难给出更多的信息 - 但不要试图绕过这个问题; 修复它,这样你就有一个有效的XML文件可以开始使用了。 - Jon Skeet
你使用的是哪种XML编码?ISO 8859-1会在一些带重音符号的字符上失败,而UTF-8则不会。 - devilfish17
你能发布一下XML文件的头吗?那应该会显示它所使用的编码。 - criticalfix
有人一直在创建XML文件,而没有使用XML API。也许是使用字符串拼接的方式? - John Saunders
XML文件是为了驱动测试自动化而创建的数据驱动文件。XML的头部如下所示- <?xml version="1.0" encoding="utf-8" standalone="yes" ?>。 - erman8
显示剩余2条评论
2个回答

5
请使用此标题:
<?XML VERSION='1.0' ENCODING='ISO-8859-1'?>

编辑

编码声明用于标识XML文档中使用的字符编码。虽然XML解析器可以自动确定文档是否使用UTF-8或UTF-16 Unicode编码,但在支持其他编码的文档中应该使用此声明。


为什么?一个答案应该解释它如何帮助解决问题。 - mmmmmm
好的,谢谢你马克。我们不仅要解决他们的问题,还要帮助他们理解它是如何工作的,这将改善答案,并记住这一点以备下次使用。 - Logar314159
1
@erman8 如果这个解决了你的问题,请考虑将Logar314159的答案标记为“已接受”。干杯。 - David Zemens
1
使用 SQL Server 生成的文件时,我发现使用 ENCODING='windows-1252' 可以获得更好的结果。 - iDevlop

0

为了确定文件是否按照其头部所说的方式进行编码,请使用十六进制阅读器(例如HxD)查看存储的字节。

如果文件是UTF8编码,您应该会看到类似于以下内容:

(...)  ProviderInfo="Dr Marc-André Kärcher Samuels Senior|10 Château du Feÿ Ave (...)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接