C# XML解析器在文件的中途突然被先前解析的拉丁字符阻塞

C# XML解析器在文件的中途突然被先前解析的拉丁字符阻塞,c#,.net,xml,character-encoding,C#,.net,Xml,Character Encoding,我有一个用c#.net编写的XML加载器类,它应该能够读取XML文件,提取相关的数据位并将它们插入数据库。到目前为止还很普通 然而,当我遇到一个包含拉丁字符的特定文件时,我对它的行为感到非常惊讶。它加载了文件的大部分,然后——非常突然地——在一个非标准字符上抛出一个非法字符错误,该字符已经成功处理了很多次 DBException:将表批量复制到[表]时出错----> System.Xml.XmlException:给定编码中的字符无效。线 182078,位置47 这是在字符ñ上抛出的,该字符已在

我有一个用c#.net编写的XML加载器类,它应该能够读取XML文件,提取相关的数据位并将它们插入数据库。到目前为止还很普通

然而,当我遇到一个包含拉丁字符的特定文件时,我对它的行为感到非常惊讶。它加载了文件的大部分,然后——非常突然地——在一个非标准字符上抛出一个非法字符错误,该字符已经成功处理了很多次

DBException:将表批量复制到[表]时出错----> System.Xml.XmlException:给定编码中的字符无效。线 182078,位置47

这是在字符ñ上抛出的,该字符已在第506、999、1039行和其他许多行上成功处理。我在一个十六进制编辑器中检查过,它们是相同的实际字符,它们是:U+00F1ñc3 b1拉丁文小写字母N,带波浪号

所以我不知道是什么导致它突然成了问题。如果您将一个导致问题的片段复制到一个新文件中,并尝试从那里加载它,那么问题似乎仍然存在,而且该片段是什么似乎无关紧要,因此它不太可能是转义字符

这真是让我摸不着头脑-非常感谢你的建议

干杯,
Matt

注释中提到了此问题的答案-这是使用不同文本编辑器进行多次复制和粘贴操作的结果,这可能会导致字符集发生更改


尽可能始终使用原始数据

请在文件中公布该字符周围的字节,以及声明的编码。关于如何发现它们,有什么建议吗?我正在使用十六进制编辑器Neo来获得编码。使用Neo来获得文件中的正确区域(基于上下文),然后发布准确的字节。。。以及可能在文件开头指定的编码。哦,很好。它们的字节不同——处理的是十进制177,阻塞的是十进制195。除了xml版本1.0和名称空间声明之外,在文件的开头没有任何编码——好吧,如果xml声明中没有声明,我相信它将被假定为UTF-8或UTF-16。请注意,如果是UTF-8,177或195字节本身就不是完整字符。你不应该复制和粘贴文本-重要的是字节。