Accept-Encoding 引起亂碼的問題

在java 中,使用HttpURLConnection 實作get 和post 時,會遇到回傳的資料為亂碼。此時可以檢查setRequestProperty 的Accept-Encoding 值。若設定為以下,

setRequestProperty("Accept-Encoding", "gzip, deflate, br");

可以藉由getHeaderField(Content-Encoding) 來確認回傳的資料格式。

一般而言,若設為「gzip, deflate, br」 ,則回傳的格式會為「br」,可以參考維基百科。「br」的壓縮格式,在java 中是比較難解決。最簡單的解決方式,則是將Accept-Encoding 設為「gzip, deflate」,則回傳的格式會為「gzip」,此時可以使用GZIPInputStream 來解壓縮資料。

舉例:以大台南公車為例

由上圖可以看到請求的Accept-Encoding 為「gzip, deflate, br」,則回應的Content-Encoding 為「br」。重新傳送要求,並將Accept-Encofing 改為「gzip, deflat」,則回應的Content-Encoding 會變為「gzip」。

發佈留言