我正在尝试使用<?version = 1.0, encoding = UTF-8>
解析XML文件
但遇到了错误消息invalid byte 2 of 2-byte UTF-8 sequence
。有人知道导致这个问题的原因吗?
答案 0 :(得分:21)
最常见的是由于喂养ISO-8859-x
(Latin-x,如Latin-1),但解析器认为它正在获得UTF-8
。某些Latin-1字符序列(带有重音符号或变音符号的两个连续字符)形成无效的UTF-8
,特别是基于第一个字节,第二个字节具有意外的高位。
当某些进程使用Latin-1转储XML
时,很容易发生这种情况,但要么忘记输出XML
声明(在这种情况下XML
解析器必须默认为UTF-8
},根据XML
规范),或声称它是UTF-8
,即使它不是。{/ p>
答案 1 :(得分:5)
解析器设置为UTF-8,即使文件是以其他方式编码的,或者文件声明为使用UTF-8,但实际上并非如此。
答案 2 :(得分:5)
我遇到了同样的问题。我的问题是我用jdom和 FileWriter(xmlFile)创建了一个新的XML文件。 FileWriter无法创建UTF-8文件。 而是使用 FileOutputStream(xmlFile)解决了它。
答案 3 :(得分:4)
您可以尝试将String.getBytes()使用的默认字符编码更改为utf-8。使用VM选项-Dfile.encoding = utf-8。
答案 4 :(得分:1)
对于那些仍然犯这种错误的人。
因为正在使用UTF-8,请查看您的xml文档以查找任何拉丁字母: 我有同样的问题,原因是我有这个:
<n:name>Åke Jógvan Øyvind</n:name>
希望这有帮助
答案 5 :(得分:0)
尝试将我的.xml文件导入我的java工具时也遇到了同样的问题。我找到了一个很好的解决方案: 1.使用Notepad ++打开.xml文件,然后将.xml文件另存为.rtf文件。然后在写字板应用程序中打开此文件。 2.将.rtf文件另存为.txt文件,然后使用记事本打开它,并再次将其另存为.xml文件。在记事本中保存时,在弹出窗口的末尾附近,请确保选择“编码:UTF-8”选项。 它对我有用,希望它对你也有用。
答案 6 :(得分:0)
在这种情况下,输入编码的切换可能会有所帮助:
XMLEventReader eventReader =
inputFactory.createXMLEventReader(in,
"utf-8"
//"windows-1251"
);