com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException:4字节UTF-8序列(XML)的无效字节2

时间:2014-02-21 07:51:07

标签: java xml dom encoding utf-8

我得到了这个Exceptoin,问题在于我输入了utf-8编码的字符。

在我的XML文件的顶部说:<?xml version="1.0" encoding="UTF-8" ?> 我添加了编码。但是我得到了这个例外。

 //Set the format
    Format format = Format.getPrettyFormat();
    format.setEncoding("UTF-8");
    XMLOutputter xmlOutput = new XMLOutputter(format);
    // Create a new file and write XML to it
    xmlOutput.output(doc, new FileOutputStream(new File(XMLEditorService
            .getXMLEditorService().getFile())));

解析文件时似乎发生了错误:

Document xmlDocument = builder.parse(file);

com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 4-byte UTF-8 sequence.
    at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.peekChar(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

你告诉解析器文件是用UTF-8编码的,解析器告诉你它不是。我倾向于相信解析器。

有两种诊断方法:

(a)检查二进制级别的文件,看看实际的八位字节是什么,以及实际的编码是什么。

(b)研究文件是如何形成的,以及编码的字符可能是多么糟糕。

答案 1 :(得分:1)

我遇到同样的问题。我的问题是我用jdom和 FileWriter(xmlFile)创建了一个新的XML文件。 FileWriter无法创建UTF-8文件。 而是使用 FileOutputStream(xmlFile)解决了它。