从URL读取数据返回奇怪的字符

时间:2013-11-29 16:06:23

标签: java json url

我试图通过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?似乎回答了我的问题。在我要求确保答案不在这里并找不到任何内容之前,我尝试过搜索。猜猜我看起来不够努力。

2 个答案:

答案 0 :(得分:2)

是的,默认情况下,URL会返回gzip编码的内容。

你可以做以下三件事之一:

  1. 在您的请求中明确设置Accept-Encoding:标头。除非在请求中将Web服务列为可接受的编码,否则Web服务不应返回gzip压缩,因此该网站不是非常友好。您的浏览器将其设置为我怀疑接受,这就是为什么您可以在那里看到它。只需将其设置为空值,它应按照规范返回非编码响应,您的里程可能因此而异。

  2. 或者使用此How to handle non-UTF8 html page in Java?中的答案来说明如何解压缩响应。这应该是#1的首选选项。

  3. 和/或要求托管该服务的人实施推荐的方案,该方案仅在客户端表示可以处理它们时提供压缩响应,或者是否可以高度自信地从浏览器指纹推断出来。 / p>

  4. 祝你好运C.

答案 1 :(得分:1)

您需要检查Content-Encoding标题。即使您没有要求,有问题的URL也会不正确地返回gzip压缩内容,您需要通过解码器运行它。