1. 程式人生 > >Android 4.4 網路get請求出現中文亂碼 導致伺服器無法對傳輸的資料進行解析

Android 4.4 網路get請求出現中文亂碼 導致伺服器無法對傳輸的資料進行解析

最近在進行Android開發的過程中,發現了一個問題,特意在這裡記錄一下。下面我來描述一下這個問題:當我在Android 4.4版本進行http get請求的時候,我的get請求連結裡的中文字串顯示為???,導致伺服器不能正常識別我的引數,從而使程式執行出錯(並不是所有的Android裝置都會出錯,我的這種情況僅在Android版本為5.0以下的裝置上出現了)。  具體的情況如下圖:    在上圖可以看出,data引數本來是一箇中文字串,但是卻變成了???,導致伺服器那邊接受到引數不能識別。  從圖中看出,我的content-type裡已經包括了UTF-8編碼,但是依舊顯示的是亂碼。一般情況下,出現這種中文亂碼都是由於編碼導致的。經過測試和查閱資料,我在進行我的網路請求之前,也就是在拼接我的url之前對我們的中文引數進行編碼,就可以解決這個問題。  下面我把自己修改前後的程式碼貼出來(在進行網路請求之前的url拼接階段):  這是之前出錯的程式碼:

 public void getAutoCompleteInfo(String data, SingleServiceState listener) {         this.listener = listener;         String url = URL.AUTO_COMPLETE + "?data=" + data + "&types=3,4,5";         QueueHelpter.add(NetHelper.get(url, JsonArray.class, this));  }12345

這是修改之後正確的程式碼:

public void getAutoCompleteInfo(String data, SingleServiceState listener) {         try {             this.listener = listener;             String s = URLEncoder.encode(data, "utf-8");             String url = URL.AUTO_COMPLETE + "?data=" + s + "&types=3,4,5";             QueueHelpter.add(NetHelper.get(url, JsonArray.class, this));         } catch (UnsupportedEncodingException e) {             e.printStackTrace();         } }12345678910

通過比較可以得出,data字串進行了URLEncoder.encode(data, “utf-8”)的處理,之後再進行拼接,就不再是???這樣的亂碼了。  出現亂碼可能會有多種情況,我這篇文章說的是其中的一種,也就是我自己遇到的一個問題。