当前位置: 首页 > 编程语言 > C#

C#读取具有不同编码字符的XML分享

时间:2023-04-11 00:59:33 C#

C#读取具有不同编码字符的XML我在读取XML时遇到问题。找到了解决方案,但仍然存在一些问题。不正确的XML文件以UTF-8编码,并在其标头中包含适当的标签。但它还包括一个以UTF-16编码的字符-'é'。此代码用于读取XML文件以验证其内容:varxDoc=XDocument.Load(taxFile);它针对指定的错误XML文件抛出异常:“给定编码中的无效字符。第59行,位置104。”快速修复如下:XDocumentxDoc=null;使用(varoReader=newStreamReader(taxFile,Encoding.UTF8)){xDoc=XDocument.Load(oReader);这段代码不会为坏文件抛出异常。但是'é'字符被加载为.我的第一个问题是“它为什么有用?”。另一点是,在加载“é”的节点之前,使用XmlReader不会引发异常。XmlReaderxmlTax=XmlReader.Create(filePath);使用StreamReader再次锻炼有帮助。同样的问题。似乎修复解决方案不够好,因为总有一天:)以其他格式编码的XML可能会出现,而且可能以错误的方式出现。但我正在尝试处理UTF-16格式的XML文件并且它工作正常(配置为UTF-8)。最后一个问题是,XDocument/XmlReader是否有任何选项可以忽略字符编码或类似这样的事情。期待你的答复。提前致谢首先要注意的是XML文件实际上是有缺陷的——您不应该在同一个文件中混合使用文本编码。当文件实际上嵌入了显式编码时,错误会更加明显。至于为什么StreamReader可以无一例外地读取它,是因为Encoding包含设置来控制遇到不兼容数据时发生的情况DocumentEncoding.UTF8使用fallback字符。来自http://msdn.microsoft.com/en-us/library/system.text.encoding.utf8.aspx:此属性返回的UTF8Encoding对象可能没有适合您的应用程序的行为。它使用替换回退来替换它无法编码的每个字符串和它无法用问号(“?”)字符解码的每个字节。您可以自己为不同的设置实例化编码。这很可能是XDocument.Load()所做的,因为默认情况下隐藏错误通常是不好的。http://msdn.microsoft.com/en-us/library/system.text.utf8encoding.aspx如果您收到这样的破解XML文件,第一步是抱怨(大声)。这种行为没有任何理由。如果您绝对必须处理它们,我建议您查看UTF8Encoding类及其DecoderFallbackProperty。看起来您应该能够实现自定义DecoderFallback和DecoderFallbackBuffer以添加将理解UTF-16字节序列的逻辑。以上就是C#学习教程:C#读取所有不同编码字符的XML共享的内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: