c# - 如何更改 XmlReader 的字符编码

标签 c# .net xml encoding character-encoding

我有一个简单的 XmlReader:

XmlReader r = XmlReader.Create(fileName);

while (r.Read())
{
    Console.WriteLine(r.Value);
}

问题是,Xml 文件有 ISO-8859-9其中的字符,这使得 XmlReader 抛出“Invalid character in the given encoding.”异常。我可以通过添加 <?xml version="1.0" encoding="ISO-8859-9" ?> 来解决这个问题开头的行,但我想以另一种方式解决这个问题,以防我无法修改源文件。如何更改 XmlReader 的编码?

最佳答案

要强制 .NET 以 ISO-8859-9 格式读取文件,只需使用众多 XmlReader.Create 重载之一,例如

using(XmlReader r = XmlReader.Create(new StreamReader(fileName, Encoding.GetEncoding("ISO-8859-9")))) {
    while(r.Read()) {
        Console.WriteLine(r.Value);
    }
}

但是,这可能行不通,因为 IIRC,W3C XML 标准说明了何时读取 XML 声明行,兼容的解析器应立即切换到 XML 声明中指定的编码,而不管它使用的是什么编码前。在您的情况下,如果 XML 文件没有 XML 声明,编码将为 UTF-8,它仍然会失败。我可能在这里胡说八道,所以试试看。 :-)

关于c# - 如何更改 XmlReader 的字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/961699/

相关文章:

c# - Autofac 使用 Assembly.Load 注册 dll

xml - 用于更新 XML 文件内容的 Powershell 脚本

c# - 在 VS2010 中放置断点是否会影响程序的运行时行为?

c# - 如何将 Observables 序列化到云端并返回

c# - Xamarin.Mac - 提交到 Mac App Store 的问题

.net - 如何使用 COM 类构建互操作(用 delphi 编写)

.net - 导出到 Excel 不适用于 Excel 2013

objective-c - 纯文本文件作为配置文件在 iOS 中只有几个值的缺点是什么?

xml - 我如何解析 tcl 脚本中的 xml 文件并读取某些标记属性并更改该属性值

c# - NLog 使用波斯历日期格式