gpt4 book ai didi

c# - 为什么 XmlReader 的默认编码与 XmlTextReader 的默认编码行为不同?

转载 作者:数据小太阳 更新时间:2023-10-29 02:05:17 26 4
gpt4 key购买 nike

我有一个 ACII 编码的 XML 文件。

我尝试使用两种不同的 Microsoft XmlReader 实现来阅读它:

  1. XmlReader.Create(new StreamReader(fileImport.FileContent, true));
  2. 新的 XmlTextReader(fileImport.FileContent)

第一个 XmlReader.Create 使用 StreamReader 进行编码,效果很好。

第二个,新的 XmlTextReader,抛出一个 XmlException 和消息“给定编码中的无效字符”。

如果您阅读了这两者的 MSDN 文档,它们都应该从字节顺序标记检测编码,如果失败则回退到 UTF-8。

XmlTextReader [msdn] XmlTextReader.Encoding property

StreamReader [msdn] StreamReader constructor

那么,为什么 XmlTextReader 会失败,编码无效,而 StreamReader 不会,当文档说这两种实现在默认情况下以相同方式处理编码时?

最佳答案

它们的工作方式相同,但您使用它们的方式不同...在第一种情况下,您将 StreamReader 作为参数传递,而在第二种情况下,您将传递文件位置。

当您在 TextReader(例如 StreamReader)上创建一个 XmlReader 时,它总是使用 TextReader< 的编码(忽略 XML 声明中编码属性的值)。当您仅传递路径或流时,它会使用 XML 声明中的编码属性。

在您的情况下,我怀疑声明的编码与文件的实际编码不匹配。我能够通过创建一个声明其编码为 UTF-8 但实际上编码为 ANSI 的 XML 文件来重现您的问题。如果文件包含非 ASCII 字符,我会得到同样的错误。但是如果我修复 XML 声明中的编码,它就可以正常工作......

关于c# - 为什么 XmlReader 的默认编码与 XmlTextReader 的默认编码行为不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12325856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com