2字节UTF-8序列的无效字节2

时间:2010-03-10 22:51:55

标签: java xml encoding

我正在尝试使用<?version = 1.0, encoding = UTF-8>解析XML文件 但遇到了错误消息invalid byte 2 of 2-byte UTF-8 sequence。有人知道导致这个问题的原因吗?

7 个答案:

答案 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"
                            );