Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java StackExchange API返回jibberish的JSON URL?_Java_Json_Url_Stackexchange Api - Fatal编程技术网

Java StackExchange API返回jibberish的JSON URL?

Java StackExchange API返回jibberish的JSON URL?,java,json,url,stackexchange-api,Java,Json,Url,Stackexchange Api,我有一种感觉,我在这里做错了什么,但我不太确定我是否错过了一个步骤,或者只是有一个编码问题或其他什么。这是我的密码: URL url = new URL("http://api.stackoverflow.com/0.8/questions/2886661"); BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); // Question q = new Gson().fro

我有一种感觉,我在这里做错了什么,但我不太确定我是否错过了一个步骤,或者只是有一个编码问题或其他什么。这是我的密码:

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);
   }
当我打印内容时,我会得到一大堆wingdings和特殊字符,基本上是jibberish。我会在这里复制并通过它,但这不起作用。我做错了什么?

改用,它将正确处理字符转换。发件人:

public final static void main(字符串[]args)引发异常{
HttpClient HttpClient=新的DefaultHttpClient();
HttpGet HttpGet=
新的HttpGet(“http://api.stackoverflow.com/0.8/questions/2886661"); 
System.out.println(“正在执行请求”+httpget.getURI());
//创建一个响应处理程序
ResponseHandler ResponseHandler=新BasicResponseHandler();
字符串responseBody=httpclient.execute(httpget,responseHandler);
系统输出打印LN(响应库);
System.out.println(“--------------------------------------------------------”;
//当不再需要HttpClient实例时,
//关闭连接管理器以确保
//立即释放所有系统资源
httpclient.getConnectionManager().shutdown();
}

在本例中,请参阅,其中显示了如何处理Gzip内容。

在本例中,这不是字符编码问题,而是内容编码问题;您需要文本,但服务器正在使用压缩来节省带宽。如果在获取该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>

我已经验证了这适用于您试图获取的url。

有时API调用响应会被压缩,例如StackExchange API。请阅读他们的文档并检查他们使用的压缩。有些使用GZIP或DEFLATE压缩

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

这不能解决解压缩api.stackoverflow.com返回的内容的问题。
 BufferedReader in = new BufferedReader(new InputStreamReader(new GZIPInputStream(url.openStream())));
InputStream is = new URL(url).openStream();
BufferedReader in = new BufferedReader(new InputStreamReader(new GZIPInputStream(is)));