android,PHP解析JSON數組,JSONArray,JSONOject,亂碼


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不了解,哎,作繭自縛啊,欠賬太多了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM