我试图解析一个带有<?version = 1.0, encoding = UTF-8>
的XML文件,但遇到了错误信息invalid byte 2 of 2-byte UTF-8 sequence
。有人知道是什么原因导致了这个问题吗?
最常见的情况是由于输入了 ISO-8859-x
(如 Latin-1)而解析器认为它正在获取 UTF-8
。某些 Latin-1 字符序列(两个带有重音或变音符号的连续字符)形成的内容在 UTF-8
中是无效的,并且特别是根据第一个字节,第二个字节具有意外的高位比特。
这很容易发生,当某个过程使用 Latin-1 输出 XML
时,但要么忘记输出 XML
声明(在这种情况下,XML
解析器必须默认使用 UTF-8
,根据 XML
规范),要么声称它是 UTF-8
,即使它不是。
可能是解析器设置为UTF-8,但文件实际上使用其他编码方式,或者文件声明为使用UTF-8,但实际上并不是。
我也遇到了同样的问题。我的问题是我用jdom创建了一个新的XML文件,并使用FileWriter(xmlFile),但是FileWriter无法创建UTF-8文件。 改用FileOutputStream(xmlFile)解决了问题。
对于那些仍然遇到此类错误的人。
由于正在使用UTF-8,请检查您的XML文档中是否有任何拉丁字母等:
我曾经遇到过相同的问题,原因是我有这个:
<n:name>Åke Jógvan Øyvind</n:name>
在这种情况下,更改输入的编码方式可能会有所帮助:
XMLEventReader eventReader =
inputFactory.createXMLEventReader(in,
"utf-8"
//"windows-1251"
);