unicode轉UTF-8,JSON_encode亂碼解決
--------------------------------------------------------------------------------------------------------------------------
前車之鑒,寫到這,希望能幫到路人...
小項目部分,有一部分要與伺服器通訊,反映在Android UI上,所以想到了高效的JSON
說說思路:
具體代碼如下:
public JSONArray getPhoneTopCategory() { String url=BASE_URL+"?option=GetTopCate";
/*類比瀏覽器GET請求*/ HttpGet request=new HttpGet(url); JSONArray jsonArray=null; /*StringBulder,jdk_1.5新增,用法基本跟StringBuffer一樣,但效率要比StringBuffer高得多*/ StringBuilder sbuilder=new StringBuilder(); try { /*類比瀏覽器用戶端*/ HttpClient client = getHttpClient();
/*擷取用戶端對瀏覽器發出請求後的響應情況*/ HttpResponse response=client.execute(request);
/*測試是否請求成功*/ System.out.println(response.getStatusLine().getStatusCode()); if(response.getStatusLine().getStatusCode()==200) { BufferedReader reader = new BufferedReader (new InputStreamReader(response.getEntity().getContent(),"UTF-8")); for(String s=reader.readLine();s!=null;s=reader.readLine()) { //s=new String(s.getBytes("UNICODE"), "UTF-8"); sbuilder.append(s); } Log.i("json_str", sbuilder.toString());
//這塊有必要說說,因為我返回的是一個二維數組,所以需要用到JSONArray的String(內容是數組格式)的建構函式
//一直出現列印出來的是一串unicode碼,是因為解碼不對,得先將的到的字串,通過建構函式,編程JSONArray對象
//然後,再利用JSONArray的getJSONObject方法,逐條將內容讀出,這樣,就正確的對JSON做瞭解析,不會出現列印出來
//是一串unicode編碼的問題了,另外,廢話下,用戶端,返回JSON的頁面必須是UTF-8編碼,只有UTF-8才支援JSON,如果
//是非UTF-8編碼,須提前將其他編碼格式轉化為UTF-8編碼,要不會出現亂碼甚至JSON為空白的現象,PHP別的編碼轉UTF-8
//網上比較多,大家可自行尋找
JSONArray json=new JSONArray(sbuilder.toString()); for(int i=0;i<json.length();i++) { System.out.println(json.getJSONObject(i).getString("Dname")); } //JSONArray jssonArray=json.toJSONArray(jssonArray); } }catch(Exception e) { e.printStackTrace(); } return jsonArray; }
PHP端,代碼,php為UTF-8編碼,可以利用Notepad++等轉換編碼方式
if($_POST['option']!=''){ switch($_POST['option']) { case 'GetTopCate': $sql='select XX,XXX from XXX where Dpid=0'; $result=mysql_query($sql) or die(mysql_error()); $res=Array(); while($rows=mysql_fetch_assoc($result)) { $res[]=$rows; } echo json_encode($res); break; }}
感到基礎不紮實,首先不知道JSON格式讀取出來本事是被轉換成UNICODE格式了的,以為是編碼問題,另外對JAVA的JSONArray,JSONObject不瞭解,哎,作繭自縛啊,欠賬太多了