我在阅读 XML 时遇到了问题。找到了解决方案,但仍有一些问题。不正确的 XML 文件以 UTF-8 编码并在其标题中具有适当的标记。但它还包括一个以 UTF-16 编码的字符 - 'é'。此代码用于读取 XML 文件以验证其内容:
var xDoc = XDocument.Load(taxFile);
它为指定的不正确的 XML 文件引发异常:“给定编码中的无效字符。第 59 行,位置 104。” 快速修复如下:
XDocument xDoc = null;
using (var oReader = new StreamReader(taxFile, Encoding.UTF8))
{
xDoc = XDocument.Load(oReader);
}
此代码不会为不正确的文件引发异常。但是“é”字符被加载为�。我的第一个问题是“为什么它有效?”。
另一点是在加载带有“é”的节点之前,使用 XmlReader 不会引发异常。
XmlReader xmlTax = XmlReader.Create(filePath);
再次使用 StreamReader 进行锻炼会有所帮助。同样的问题。似乎修复解决方案不够好,因为有一天:) 可能会出现以另一种格式编码的 XML,并且可能会以错误的方式进行。但我尝试处理 UTF-16 格式的 XML 文件,它工作正常(配置为 UTF-8)。
最后一个问题是是否有任何选项可以为 XDocument/XmlReader 提供忽略字符编码或类似这样的 smth。
期待您的回复。提前致谢