【问题标题】:Invalid UTF-8 start byte 0x8b (at char #2, byte #-1)无效的 UTF-8 起始字节 0x8b(在字符 #2,字节 #-1)
【发布时间】:2016-12-17 21:10:06
【问题描述】:

我正在尝试从 url 'http://self-learning-java-tutorial.blogspot.in/atom.xml' 解析 atom 文档。在解析文档时,我收到错误“无效的 UTF-8 起始字节 0x8b(在字符 #2,字节 #-1)”。

Abdera abdera = new Abdera();
        Parser parser = abdera.getParser();

        URL url = new URL("http://self-learning-java-tutorial.blogspot.in/atom.xml");

        Document<Feed> doc = parser.parse(url.openStream(), url.toString());
        Feed feed = doc.getRoot();
        System.out.println(feed.getTitle());
        for (Entry entry : feed.getEntries()) {
            System.out.println("\t" + entry.getTitle());
        }
        System.out.println(feed.getAuthor());

谁能帮帮我,这个错误是什么以及如何解决这个错误?

【问题讨论】:

    标签: java apache-abdera


    【解决方案1】:

    来自这个 URL 的响应是 GZIP 压缩的(你的系统中必须有一些特殊的东西,因为在标准 java 8 中它不会默认发送接受 gzip,对我来说你的代码工作得很好)。

    要解决这个问题,您只需解压缩流即可。请注意,对于其他 url,您可能需要在响应未压缩时处理这种情况。另外,不要忘记关闭您打开的资源/流。

    这是您的网址的工作示例

        Abdera abdera = new Abdera();
        Parser parser = abdera.getParser();
    
        URL url = new URL(
                "http://self-learning-java-tutorial.blogspot.in/atom.xml");
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestProperty("Accept-Encoding", "gzip");
        conn.connect();
    
        try {
            String contentEncoding = conn.getContentEncoding();
            boolean isGzip = contentEncoding != null
                    && contentEncoding.contains("gzip");
            try (InputStream in = !isGzip ? conn.getInputStream()
                    : new GZIPInputStream(conn.getInputStream())) {
                Document<Feed> doc = parser.parse(in, url.toString());
                Feed feed = doc.getRoot();
                System.out.println(feed.getTitle());
                for (Entry entry : feed.getEntries()) {
                    System.out.println("\t" + entry.getTitle());
                }
                System.out.println(feed.getAuthor());
            }
        } finally {
            conn.disconnect();
        }
    

    【讨论】:

      猜你喜欢
      • 2017-05-03
      • 2011-01-26
      • 2018-04-10
      • 2018-12-26
      • 2013-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多