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