標籤:android urlencodedutils 編碼
在android開發中我們常常遇到與到亂碼問題,遇到亂碼問題首先我們要先檢查兩端編碼格式是否一致!
一般我們提交資料用get 和post方法,這兩種方法在上傳中有con.setRequestProperty("Charset", "UTF-8"); 和httppost.setEntity(new UrlEncodedFormEntity(資料,"UTF-8"));這兩中方式來確定編碼方式伺服器端有request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");來確定響應的編碼格式。這樣一般是不會出現亂碼,如果出現亂碼我們還可以建立一個過濾器來過濾亂碼,在這裡我不講過濾器,改天再單獨說一下過濾器。
今天我想說的是關於在post傳遞參數,在路徑後+?+參數傳遞方式,然後傳遞後的接受亂碼問題。
首先我們安卓端要封裝資料String str=URLEncodedUtils.format( 封裝好的Parameters資料,"UTF-8"); 然後預設utf-8編碼,然後HttpPath.FABU_PATH+"?"+str 把資料接在路徑下邊用post方式提交。在這裡用了URLEncodedUtils將資料編碼了。
接下來說的是伺服器接受問題。伺服器接受資料後會進行預設的轉碼,Tomact的預設轉碼格式是ISO_8859-1 所有我們要再次轉碼。需要兩次轉碼,下邊就是伺服器轉碼代碼
String=new String(request.getParameter("runame").getBytes("ISO_8859-1"),"UTF-8");
那麼用URLEncodedUtils編碼發送資料的一套代碼如下
安卓:String str=URLEncodedUtils.format( 封裝好的Parameters資料,"UTF-8");
java伺服器: String=new String(request.getParameter("runame").getBytes("ISO_8859-1"),"UTF-8");
runame是封裝好的資料中的一個欄位;
下面是關於url解碼的一些東西:
第一種方式指定編碼UTF-8
傳遞頁面
URLEncoder.encode(name,"UTF-8")
擷取頁面
String name=new String(request.getPatameter(name).getBytes("ISO_8859-1"),"UTF-8");
或者
傳遞頁面
URLEncoder.encode(name);
擷取頁面
String name=new String(request.getPatameter(name).getBytes("ISO_8859-1));
第二種方式是沒有指定編碼的,按平台預設的編碼。
不能寫成
傳遞頁面
URLEncoder.encode(name,"UTF-8")
擷取頁面
String name=new String(request.getPatameter(name).getBytes("ISO_8859-1));
這樣的話有可能出現亂碼。因為你不知道平台的編碼是什麼。
所以只能按第一或者第二種形式,java推薦我們用第一種指定編碼“utf-8”
android 和伺服器的URLEncodedUtils亂碼編碼問題