有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在读取RSS源时“1字节UTF8序列的1字节无效”

我的代码非常简单:

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

问题是,我以en例外结束:

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。。。 有什么解释吗


共 (1) 个答案

  1. # 1 楼答案

    并非所有字节序列都是有效的UTF-8。UTF-8解码器可以读取单个字节,并根据字节值知道它在UTF-8中是非法的。听起来你有一个糟糕的RSS源,可能是一个声称是UTF-8的RSS源,但实际上编码不同,比如iso8859-1

    更新:提要URL是gzip压缩的。你试过解压吗