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

标签 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;
        }
    }
}

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

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

最佳答案

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

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

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

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

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

祝你好运 C.

关于java - 从返回奇怪字符的 URL 读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20289614/

相关文章:

file - 将文件重定向到用于流式传输的 url

java - 所有 com.android.support 库必须使用完全相同的版本规范(版本 27.1.1、26.1.0)

java - 创建一个 JTable

java - 为什么 EventDispatchThread 排在第一位?

Javascript 数组对象与类似数组的对象——说明

html - HTML 文档的 URL "fragment identifier"语义

java - JPA Eclipselink 数据库更改通知不会使缓存条目无效

android - 如何在另一个记录器类中使用另一个类的变量

perl - 通过 perl 解析以 JSON 编码的数组

url - 关于替换 url 中的丹麦字符的 Sitecore 问题