【问题标题】:Reading data from URL returning strange characters [duplicate]从返回奇怪字符的 URL 读取数据 [重复]
【发布时间】:2013-11-29 16:06:23
【问题描述】:

我正在尝试通过 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;
        }
    }
}

我从中得到的输出只是一堆毫无意义的奇怪字符。如果我将 url 更改为 google.com 之类的内容,它可以正常工作。

编辑:JSON URL from StackExchange API returning jibberish? 似乎已经回答了我的问题。在我要求确保答案不在这里并且找不到任何东西之前,我尝试了搜索。我猜我看起来不够努力。

【问题讨论】:

    标签: java json url


    【解决方案1】:

    是的,该 URL 默认返回 gzip 编码的内容。

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

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

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

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

    祝你好运。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2015-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-06
        • 2019-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多