1. 程式人生 > >Java之http請求亂碼問題解決

Java之http請求亂碼問題解決

連接 tco get div gbk readline url prop safari

這周由於項目需要請求一個接口,獲取數據,反復嘗試,請求的數據始終亂碼。這裏簡單的總結一下解決亂碼的幾個方法。

首先,需要註意的是編碼方式的一致,其次對方怎麽編碼,接收方怎麽解碼即可。

先看一下請求數據的一般寫法:

 public static void main(String [] args){
    StringBuffer buffer = new StringBuffer();
        //獲取連接
        URL url = new URL("XXXXXX");
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setConnectTimeout(
3 * 1000); //設置請求頭 connection.setRequestProperty("Charset","UTF-8"); connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36"); connection.setRequestProperty("Referer","XXXXXX");
connection.setRequestProperty("Accept","application/json,text/plain,*/*"); connection.setRequestProperty("Accept-Encoding", "gzip,deflate"); connection.connect();
     //設置編碼格式“utf-8”、“gbk”、“gb2312 BufferedReader bufferedReader
= new BufferedReader(new InputStreamReader(connection.getInputStream(),"utf-8"); String str
= null; while ((str = bufferedReader.readLine()) != null) { buffer.append(str); } bufferedReader.close(); connection.disconnect();
     System.out.println(buffer); }

我們通過查詢編碼,為 UTF-8 ,但是我設置請求編碼為UTF-8 ,照樣亂碼。有點懷疑是網站的故意設置了,後來讓同事通過python請求數據是沒有問題的,才意識到或許是我代碼有問題。後來發現我忽略了,響應頭。

技術分享圖片

最終在網上找到了解決辦法。

java.util.zip 下的工具類來解壓輸入流,詳細代碼如下:

     //具體處理代碼與上面一樣,只需要對輸入流進行解壓即可
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new GZIPInputStream(connection.getInputStream()),"utf-8");

Java之http請求亂碼問題解決