【发布时间】:2010-09-20 06:56:20
【问题描述】:
给定一个 Stream 作为输入,我如何安全地创建一个针对 XML 数据源的 XPathNavigator?
XML 数据源:
- 可能包含需要删除的无效十六进制字符。
- 可能包含与文档声明的编码不匹配的字符。
例如,云中的一些XML数据源会声明编码为utf-8,但实际编码为windows-1252或 ISO 8859-1,这会导致在针对 Stream 创建 XmlReader 时引发无效字符异常。
来自 StreamReader.CurrentEncoding 属性文档:“当前阅读器使用的当前字符编码。在第一次调用 StreamReader 的任何 Read 方法后,该值可以不同,因为编码自动检测不是完成,直到第一次调用 Read 方法。”这似乎表明可以在第一次读取后检查 CurrentEncoding,但是当我们需要将 XML 数据写入 Stream 时,我们是否会卡住存储此编码?
我希望找到一种最佳实践,针对 XML 数据源安全地创建 XPathNavigator/IXPathNavigable 实例,该数据源将优雅地处理编码无效字符问题(最好在 C# 中)。
【问题讨论】: