MalformedByteSequenceException: 当使用希伯来语字符时,无效的1字节UTF-8序列的第1个字节。

6
我正在尝试解析包含希伯来字符的XML文件。 我知道文件是正确的,因为如果我从不同的软件中输出不包含希伯来字符的文件,则可以成功解析。 我尝试了很多方法,但总是出现这个错误。
MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.

我最新的尝试是使用 FileInputStream 打开它并指定编码方式。

DocumentBuilder db = dbf.newDocumentBuilder();
document = db.parse(new FileInputStream(new File(xmlFileName)), "Cp1252");

Cp1252 是我在另一个应用程序中使用的编码,但是我得到了相同的结果。

尝试使用 ByteArray,但没有奏效。

有什么建议吗?


文件是用什么编码方式进行编码的?你正在使用哪个API来解析它? - Joni
我不太确定文件使用的编码是什么。在第一行缺少编码部分。我正在使用Java内置的DocumentBuilder.parse函数。 - La bla bla
parse 的第二个参数是系统标识符,而不是字符编码。 - jtahlborn
2个回答

7
如果您知道文件的正确编码而不是"utf-8",那么您可以将其添加到XML头中:
<?xml version="1.0" encoding="[correct encoding here]" ?>

或者将其解析为 Reader:
db.parse(new InputStreamReader(new FileInputStream(new File(xmlFileName)), "[correct encoding here]"));

我最终确实是那样做的。实际上,我两个都做了,而且它有效。 - La bla bla

1
解决方案非常简单,获取UTF-8格式的内容,并覆盖SAX输入源。
File file = new File("c:\\file-utf.xml");
InputStream inputStream= new FileInputStream(file);
Reader reader = new InputStreamReader(inputStream,"UTF-8");

InputSource is = new InputSource(reader);
// is.setEncoding("UTF-8"); -> This line causes error! Content is not allowed in prolog

saxParser.parse(is, handler);

你可以在这里阅读完整的示例 - http://www.mkyong.com/java/how-to-read-utf-8-xml-file-in-java-sax-parser/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接