我得到了这个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)
如何解决这个问题?
答案 0 :(得分:1)
你告诉解析器文件是用UTF-8编码的,解析器告诉你它不是。我倾向于相信解析器。
有两种诊断方法:
(a)检查二进制级别的文件,看看实际的八位字节是什么,以及实际的编码是什么。
(b)研究文件是如何形成的,以及编码的字符可能是多么糟糕。
答案 1 :(得分:1)
我遇到同样的问题。我的问题是我用jdom和 FileWriter(xmlFile)创建了一个新的XML文件。 FileWriter无法创建UTF-8文件。 而是使用 FileOutputStream(xmlFile)解决了它。