1. 程式人生 > >Android Accept-Encoding為gzip,deflate Http請求返回的結果為亂碼

Android Accept-Encoding為gzip,deflate Http請求返回的結果為亂碼

最近專案中遇到這樣一個坑:
某一介面的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(); }