我试图通过java从json文件中获取数据。如果我使用浏览器导航到URL,一切都显示正常,但如果我尝试使用java获取数据,我会得到一堆无法解释或解析的字符。请注意,此代码适用于其他JSON文件。这可能是JSON文件创建方式的服务器端吗?我尝试使用不同的字符集,但似乎没有解决问题。
public static void main(String[] args) throws Exception {
URL url = new URL("http://www.minecraftpvp.com/api/ping.json");
URLConnection connection = url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
boolean hasLine = true;
while (hasLine) {
String line = in.readLine();
if (line != null) {
System.out.println(line);
} else {
hasLine = false;
}
}
}
我从中获得的输出只是一大堆根本没有意义的奇怪角色。如果我将网址更改为google.com之类的网址,则可以正常使用。
编辑:JSON URL from StackExchange API returning jibberish?似乎回答了我的问题。在我要求确保答案不在这里并找不到任何内容之前,我尝试过搜索。猜猜我看起来不够努力。
答案 0 :(得分:2)
是的,默认情况下,URL会返回gzip编码的内容。
你可以做以下三件事之一:
在您的请求中明确设置Accept-Encoding:
标头。除非在请求中将Web服务列为可接受的编码,否则Web服务不应返回gzip压缩,因此该网站不是非常友好。您的浏览器将其设置为我怀疑接受,这就是为什么您可以在那里看到它。只需将其设置为空值,它应按照规范返回非编码响应,您的里程可能因此而异。
或者使用此How to handle non-UTF8 html page in Java?中的答案来说明如何解压缩响应。这应该是#1的首选选项。
和/或要求托管该服务的人实施推荐的方案,该方案仅在客户端表示可以处理它们时提供压缩响应,或者是否可以高度自信地从浏览器指纹推断出来。 / p>
祝你好运C.
答案 1 :(得分:1)
您需要检查Content-Encoding
标题。即使您没有要求,有问题的URL也会不正确地返回gzip压缩内容,您需要通过解码器运行它。