Android Accept-Encoding為gzip,deflate Http請求返回的結果為亂碼
阿新 • • 發佈:2019-01-22
最近專案中遇到這樣一個坑:
某一介面的HttpUrlConnection的請求返回結果為亂碼,但PC瀏覽器直接開啟是正常的。
效果圖如下:
經過查閱程式碼發現,該介面的對應Header中有這麼一段程式碼:
headers.put("Accept-Encoding", "gzip,deflate");
那麼Accept-Encoding為gzip,deflate代表什麼意思呢?
Accept-Encoding為gzip,deflate的含義
Accept-Encoding是用來設定從服務端返回的資料是否進行gzip壓縮(gzip是一種資料格式,預設目前僅使用deflate演算法壓縮data部分)。
也就是說,如果客戶端設定了gzip,deflate,等於告訴服務端,客戶端是支援gzip格式的資料解壓縮的。
若服務端支援gzip,deflate壓縮方式,則客戶端收到的資料則為gzip格式壓縮的。
解決方案
第一種解決方案:
直接去掉headers.put(“Accept-Encoding”, “gzip,deflate”);
專案中,我們也是採用的此方法。
第二種解決方案:
解碼服務端返回的gzip格式壓縮的資料。
private String zipInputStream(InputStream is) throws IOException {
GZIPInputStream gzip = new GZIPInputStream(is);
BufferedReader in = new BufferedReader(new InputStreamReader(gzip, "UTF-8"));
StringBuffer buffer = new StringBuffer();
String line;
while ((line = in.readLine()) != null)
buffer.append(line + "\n");
is.close();
return buffer.toString();
}