C#解析ISO-8859-1中的XML
我正在开发一个用于验证从大型机获取的XML文件的工具。出于我无法控制的原因,每个XML文件都用ISO 8859-1编码C#解析ISO-8859-1中的XML,c#,xml,C#,Xml,我正在开发一个用于验证从大型机获取的XML文件的工具。出于我无法控制的原因,每个XML文件都用ISO 8859-1编码 <?xml version="1.0" encoding="ISO 8859-1"?> 正如Jeroen在评论中指出的,编码应该是: <?xml version="1.0" encoding="ISO-8859-1"?> (来自competent_tech在我先前评论中链接的其他线程中的回答) 如果您不想使用语句,我想您可以: var xmlDoc
<?xml version="1.0" encoding="ISO 8859-1"?>
正如Jeroen在评论中指出的,编码应该是:
<?xml version="1.0" encoding="ISO-8859-1"?>
(来自competent_tech
在我先前评论中链接的其他线程中的回答)
如果您不想使用语句,我想您可以:
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(File.ReadAllText("//fileLocation", Encoding.GetEncoding("ISO-8859-1")));
如果引用程序集System.Xml.Linq.dll
(自.NET 3.5以来),则可以在命名空间System.Xml.Linq
中使用,而不是XmlDocument
。它有静态方法,如Load(Stream)
和Parse(string)
,您可以如上所述使用这些方法。正如Jeroen在评论中指出的,编码应该是:
<?xml version="1.0" encoding="ISO-8859-1"?>
(来自competent_tech
在我先前评论中链接的其他线程中的回答)
如果您不想使用语句,我想您可以:
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(File.ReadAllText("//fileLocation", Encoding.GetEncoding("ISO-8859-1")));
如果引用程序集System.Xml.Linq.dll
(自.NET 3.5以来),则可以在命名空间System.Xml.Linq
中使用,而不是XmlDocument
。它有一些静态方法,比如Load(Stream)
和Parse(string)
,您可以像上面一样使用这些方法。请显示您的代码。实际的代码是什么?错误的实际信息是什么?实际的文件是什么XDocument.Parse(“”)可以正常工作。(这当然是System.Xml.Linq
,而不是普通的System.Xml
)如果所有其他操作都失败,显然,您可以在将结果解析为Xml之前执行String.Replace
来删除指令。它抛出的错误是:System.Xml.xmleexception“发生在System.Xml.dll中。系统不支持“ISO 8859-1”编码。第1行,位置31。简单地说,代码如下:XMLDocument xmlDoc=new XMLDocument();加载(//fileLocation)
。这就是它失败的原因。对不起,我把它编辑到了我的回复中,我不知道按enter键提交了我的评论。我是这个网站的新手-抱歉。问题是ISO 8859-1
不是公认的内置编码名称<代码>ISO-8859-1
is。愚蠢但真实。在.NET4.6之前(它允许您注册其他编码提供程序),我不知道是否有办法添加编码别名,但我对此表示怀疑。基于此,有许多可能的解决方法(最简单的方法是添加连字符…),比如首先手动读取文件,然后使用.LoadXml
(这会忽略指令中的编码,因为字符串在内部必须是UTF-16)。如果文件太大了,你就得更精细一些。请显示你的代码。实际代码是什么?错误的实际信息是什么?实际的文件是什么XDocument.Parse(“”)可以正常工作。(这当然是System.Xml.Linq
,而不是普通的System.Xml
)如果所有其他操作都失败,显然,您可以在将结果解析为Xml之前执行String.Replace
来删除指令。它抛出的错误是:System.Xml.xmleexception“发生在System.Xml.dll中。系统不支持“ISO 8859-1”编码。第1行,位置31。简单地说,代码如下:XMLDocument xmlDoc=new XMLDocument();加载(//fileLocation)
。这就是它失败的原因。对不起,我把它编辑到了我的回复中,我不知道按enter键提交了我的评论。我是这个网站的新手-抱歉。问题是ISO 8859-1
不是公认的内置编码名称<代码>ISO-8859-1
is。愚蠢但真实。在.NET4.6之前(它允许您注册其他编码提供程序),我不知道是否有办法添加编码别名,但我对此表示怀疑。基于此,有许多可能的解决方法(最简单的方法是添加连字符…),比如首先手动读取文件,然后使用.LoadXml
(这会忽略指令中的编码,因为字符串在内部必须是UTF-16)。如果文件太大,那么您就必须更精细一些。我最终使用了xmlDoc.LoadXml(file.ReadAllText(“//fileLocation”,Encoding.GetEncoding(“ISO-8859-1”)代码>而且效果很好。谢谢最后我使用了xmlDoc.LoadXml(File.ReadAllText(//fileLocation),Encoding.GetEncoding(“ISO-8859-1”)代码>而且效果很好。谢谢
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(File.ReadAllText("//fileLocation", Encoding.GetEncoding("ISO-8859-1")));