1

私のコードは超シンプルです:

DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = db.parse("http://blog.rogermontgomery.com/feed/?cat=skaffold");

問題は、私が例外で終わることです:

com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.
    at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(UTF8Reader.java:684)
    at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:554)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1742)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.arrangeCapacity(XMLEntityScanner.java:1619)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipString(XMLEntityScanner.java:1657)
    at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:193)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:772)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:232)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)
    at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:180)
    at com.skaffold.service.RogerBlogReader.read(RogerBlogReader.java:33)
[...]

わかりません。xmlヘッダーはドキュメントをUTF-8として宣言し、http応答はUTF-8でエンコードされています...説明はありますか?

4

1 に答える 1

2

すべてのバイト シーケンスが有効な UTF-8 であるとは限りません。UTF-8 デコーダーは 1 バイトを読み取ることができ、そのバイト値に基づいて UTF-8 では不正であることを認識できます。おそらく UTF-8 であると主張しているが、実際には iso8859-1 のように別の方法でエンコードされている、悪い RSS フィードを持っているようです。

更新: フィード URL は gzip 圧縮されています。解凍してみましたか?

于 2012-07-20T01:01:50.747 に答える