编程语言
首页 > 编程语言> > java – StackExchange API返回jibberish的JSON URL?

java – StackExchange API返回jibberish的JSON URL?

作者:互联网

我有一种感觉,我在这里做错了,但我不太确定我是否错过了一步,或者只是遇到了编码问题.这是我的代码:

URL url = new URL("http://api.stackoverflow.com/0.8/questions/2886661");

   BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
   // Question q = new Gson().fromJson(in, Question.class);
   String line;
   StringBuffer content = new StringBuffer();
   while ((line = in.readLine()) != null)
   {
    content.append(line);
   }

当我打印内容时,我得到了一大堆的翅膀和特殊的角色,基本上是乱七八糟的.我会复制并通过它,但这不起作用.我究竟做错了什么?

解决方法:

在这种情况下,它不是字符编码问题,它是内容编码问题;你期待文本,但服务器正在使用压缩来节省带宽.如果您在获取该URL时查看标题,则可以看到您要连接的服务器返回gzip压缩内容:

GET /0.8/questions/2886661 HTTP/1.1
Host: api.stackoverflow.com

HTTP/1.1 200 OK
Server: nginx
Date: Sat, 22 May 2010 15:51:34 GMT
Content-Type: application/json; charset=utf-8
<more headers>
Content-Encoding: gzip
<more headers>

因此,您需要使用像Apache的HttpClient这样的智能客户端,因为stevedbrown建议(尽管您需要a tweak to get it to speak Gzip automatically),或者明确解压缩您在示例代码中获得的流.请在您声明输入的行中尝试此操作:

 BufferedReader in = new BufferedReader(new InputStreamReader(new GZIPInputStream(url.openStream())));

我已经确认这适用于你想要抓住的网址.

标签:json,java,url,stackexchange-api
来源: https://codeday.me/bug/20190526/1158858.html