Android HttpGet-奇怪的编码/字符

Android HttpGet-奇怪的编码/字符,android,encoding,http-get,Android,Encoding,Http Get,我有一节以下的课 public class MyHttpClient { private static HttpClient httpClient = null; public static HttpClient getHttpClient() { if (httpClient == null) httpClient = new DefaultHttpClient(); return httpClient; } public static String Ht

我有一节以下的课

public class MyHttpClient {
private static HttpClient httpClient = null;

public static HttpClient getHttpClient() {
    if (httpClient == null)
        httpClient = new DefaultHttpClient();

    return httpClient;
}

public static String HttpGetRequest(String url) throws IOException {
    HttpGet request = new HttpGet(url);
    HttpResponse response = null;
    InputStream stream = null;

    String result = "";
    try {
        response = getHttpClient().execute(request);
        if (response.getStatusLine().getStatusCode() != 200)
            response = null;
        else
            stream = response.getEntity().getContent();

            String line = "";
            StringBuilder total = new StringBuilder();
            BufferedReader rd = new BufferedReader(new InputStreamReader(stream));
            while ((line = rd.readLine()) != null) { 
                total.append(line); 
            }

            // Return full string
            result = total.toString();
    } catch (ClientProtocolException e) {
        response = null;
        stream = null;
        result = null;
    } catch (IllegalStateException e) {
        response = null;
        stream = null;
        result = null;
    }

    return result;
}
}
还有一个web服务,响应头是(由于隐私问题,我无法提供直接链接)

状态:HTTP/1.1200

确定缓存控制:专用

内容类型:application/json

字符集=utf-8

内容编码:gzip

服务器:Microsoft IIS/7.5

X-AspNetMvc-Version:3.0

X-AspNet-Version:4.0.30319

X-Powered-By:ASP.NET

日期:2003年3月3日星期日

2011年7月11:00:43格林尼治标准时间

连接:关闭

内容长度:8134

最后,我得到了一系列奇怪的、不可读的字符(我应该像在普通桌面浏览器中一样得到常规的JSON)

问题出在哪里?(同样的代码在ex.google.com上运行得很好,我得到了很好的结果)

编辑:解决方案(请参见下面的说明) 替换

替换

stream = response.getEntity().getContent();

问题在于:

Content-Encoding: gzip
这意味着您得到的奇怪字符是预期JSON的gzip压缩版本。您的浏览器执行解压缩,以便在那里看到解码结果。您应该查看您的请求头和服务器的配置。

问题在于:

Content-Encoding: gzip

这意味着您得到的奇怪字符是预期JSON的gzip压缩版本。您的浏览器执行解压缩,以便在那里看到解码结果。您应该看看您的请求头和服务器的配置。

好吧,gzip编码通常是一种很好的做法-对于JSON数据(尤其是大数据),它实际上可以将要传输的数据量减少10到20倍(这是一件好事)。。所以最好让HttpClient很好地处理GZIP压缩。例如:


顺便说一句,在服务器端,当客户端没有说“接受编码:GZIP”时,提供GZIP压缩数据似乎是错误的,这似乎是这样的。。。因此,有些事情也必须在服务器上进行纠正。上面的示例为您添加了Accept Encoding头。

好吧,gzip编码通常是一种好的做法——对于JSON数据(尤其是大数据),它实际上可以将要传输的数据量减少10到20倍(这是一件好事)。。所以最好让HttpClient很好地处理GZIP压缩。例如:


顺便说一句,在服务器端,当客户端没有说“接受编码:GZIP”时,提供GZIP压缩数据似乎是错误的,这似乎是这样的。。。因此,有些事情也必须在服务器上进行纠正。上面的示例为您添加了Accept Encoding标头。

太好了!我忽略了那个。谢谢;)伟大的我忽略了那个。谢谢;)
stream = response.getEntity().getContent();
Header contentEncoding = response.getFirstHeader("Content-Encoding");
if (contentEncoding != null && contentEncoding.getValue().equalsIgnoreCase("gzip")) {
    stream = new GZIPInputStream(stream);
}
Content-Encoding: gzip