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”)的處理,之後再進行拼接,就不再是???這樣的亂碼了。 出現亂碼可能會有多種情況,我這篇文章說的是其中的一種,也就是我自己遇到的一個問題。