注意:這裏的主題中有無數的問題,但我找不到任何針對我的特定問題的問題。儘管編碼正確,但XML解析器不解析UTF-8
我正在從http://rss.cnn.com/rss/cnn_latest.rss解析XML,並且我的解析器工作得很好,我得到了我一直在尋找的所有東西。沒問題。然後突然間,工作幾個小時後,我就開始出現一些編碼錯誤。
現在,我一直在做的是將源XML寫入文件,然後解析該文件,如下所示。
File xmlfile = new File("cnnxml.txt");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlfile);
有什麼奇怪的是,這是XML文件的第一行,所以它似乎編碼是,事實上,UTF-8
<?xml version="1.0" encoding="UTF-8"?>
下面是我得到的錯誤蝕。
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException:Invalid byte 3 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.scanData(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanCDATASection(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)
at getRSS.main(getRSS.java:87)
而且,再次,這是整天工作,然後完全從任何地方我開始出現問題。到底是怎麼回事?
我有一個IOException嘗試抓住它,它仍然會產生此問題。當你說序列是在一個實體中時,你的意思是在每個單獨的項目中(在這種情況下,每個故事鏈接在RSS上)?這會給我的理論帶來一些可信度,無論出於何種原因,在我的編碼中增加了一些奇怪的東西,並破壞了曾經的工作。 – MPeal
@JoopEggen你的評論應該是一個答案。 –