我有一個下面的類HTTPGET - 怪異編碼/字符
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.1 200
行緩存控制:私人
Content-Type:application/json;
字符集= UTF-8
內容編碼:gzip
服務器:IIS/7.5
X-AspNetMvc-版本:3.0
X-ASPNET-版本: 4.0.30319
X-Powered-by:ASP.NET
Date:Su N,03
2011年7月11點00分43秒GMT
連接:關閉
的Content-Length:8134
最後我得到的結果是一系列怪異,難以理解的字符(我應該定期使用JSON,就像我在普通桌面瀏覽器中看到的一樣)。
問題出在哪裏?(對於實例相同的代碼google.com完美的作品,我也得到不錯的結果)
編輯:解決方案(見下文說明) 更換
HttpGet request = new HttpGet(url);
與
HttpUriRequest request = new HttpGet(url);
request.addHeader("Accept-Encoding", "gzip");
和替換
stream = response.getEntity().getContent();
與
stream = response.getEntity().getContent();
Header contentEncoding = response.getFirstHeader("Content-Encoding");
if (contentEncoding != null && contentEncoding.getValue().equalsIgnoreCase("gzip")) {
stream = new GZIPInputStream(stream);
}
太棒了!我忽略了那個。謝謝 ;) – svenkapudija