无效的 UTF-8 起始字节 0x8b(位于字符 #2,字节 #-1)
Invalid UTF-8 start byte 0x8b (at char #2, byte #-1)
我正在尝试从 url 'http://self-learning-java-tutorial.blogspot.in/atom.xml' 解析 atom 文档。解析文档时,出现错误 'Invalid UTF-8 start byte 0x8b (at char #2, byte #-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());
任何人都可以帮助我,这个错误是什么以及如何解决这个错误?
来自这个 URL 的响应是 GZIP 压缩的(你的系统中必须有一些特殊的东西作为标准 java 8 它不会默认发送接受 gzip 并且对我来说你的代码只是美好的)。
要解决这个问题,您只需解压缩流即可。请注意,对于其他 url,您可能需要处理未压缩响应的情况。另外,不要忘记关闭您打开的resources/streams。
这是您的 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();
}
我正在尝试从 url 'http://self-learning-java-tutorial.blogspot.in/atom.xml' 解析 atom 文档。解析文档时,出现错误 'Invalid UTF-8 start byte 0x8b (at char #2, byte #-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());
任何人都可以帮助我,这个错误是什么以及如何解决这个错误?
来自这个 URL 的响应是 GZIP 压缩的(你的系统中必须有一些特殊的东西作为标准 java 8 它不会默认发送接受 gzip 并且对我来说你的代码只是美好的)。
要解决这个问题,您只需解压缩流即可。请注意,对于其他 url,您可能需要处理未压缩响应的情况。另外,不要忘记关闭您打开的resources/streams。
这是您的 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();
}