2012-11-09 38 views
1

我想用PHP传递数据(来自服务器),数据由中文字符组成。我试图用我设法检索数据的JSON解析器解析数据,但数据(中文)显示为???。有人能告诉我哪里出了问题吗?在android中显示中文字符

下面是我的解析器:

// function get json from url 
    // by making HTTP POST or GET method 
    public JSONObject makeHttpRequest(String url, String method, 
      List<NameValuePair> params) { 

     // Making HTTP request 
     try { 

      // check for request method 
      if(method == "POST"){ 
       // request method is POST 
       // defaultHttpClient 
       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       HttpPost httpPost = new HttpPost(url); 
       httpPost.setEntity(new UrlEncodedFormEntity(params)); 

       HttpResponse httpResponse = httpClient.execute(httpPost); 
       HttpEntity httpEntity = httpResponse.getEntity(); 
       is = httpEntity.getContent(); 

      }else if(method == "GET"){ 
       // request method is GET 
       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       String paramString = URLEncodedUtils.format(params, "utf-8"); 
       url += "?" + paramString; 
       HttpGet httpGet = new HttpGet(url); 

       HttpResponse httpResponse = httpClient.execute(httpGet); 
       HttpEntity httpEntity = httpResponse.getEntity(); 
       is = httpEntity.getContent(); 
      }   


     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(
        is, "iso-8859-1"), 8); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
      is.close(); 
      json = sb.toString(); 
     } catch (Exception e) { 
      Log.e("Buffer Error", "Error converting result " + e.toString()); 
     } 

     // try parse the string to a JSON object 
     try { 
      jObj = new JSONObject(json); 
     } catch (JSONException e) { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
     } 

     // return JSON String 
     return jObj; 

    } 

正如我logcat的观察。

11-09 07:18:53.939: D/Single Product Details(570): {"success":1,"search":[{"tel1":"67546498","generalEmail":"[email protected]","contactEmail":"[email protected]","lineOfBusiness":"??????????? Manufacture,Import\/Export","postCode1":"738733","companyNameEng":" ANDER LAB PTE LTD ","repName1Eng":"Li Jianfu","address1":"Blk 20 Woodlands Link #04-40","fax1":"67544092","repName1Chi":"???","url":"www.bosun.com.sg"}]} 

回答

0
public static String test(){ 
String testResult= ""; 
try { 
    HttpGet get = new HttpGet("http://xxxxx");//edit url removed. 
    DefaultHttpClient httpclient = new DefaultHttpClient(); 
    HttpResponse response = httpclient.execute(get); 
    String result = EntityUtils.toString(response.getEntity()); 
    JSONObject obj = new JSONObject(result); 
    if(!obj.isNull("title")){ 
     testResult= obj.getString("title"); 
     Log.d("Test","Test1:"+ testResult); 
    } 
} catch (JSONException e) { 
    e.printStackTrace(); 
} catch (ClientProtocolException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
return testResult;// 

}该代码

采取帮助。它肯定会帮助ü.. 享受

0

你没有提供的代码片断如何检索数据。这是我猜测假设源字符集是UTF-8,相应地用您的源编码替换。

InputStreamReader isr = new InputStreamReader(new ByteArrayInputStream(str.getBytes(Charset.forName("UTF-8"))), Charset.forName("UTF-8")); 

str是你的json字符串。

更新:看起来像你检索iso-8859-1,因此尝试更新您的代码UTF-8

注意:JSON文本的字符编码始终是Unicode。 UTF-8是唯一可以在线路上使用的编码,但UTF-16和UTF-32也是允许的(source)。

+0

对不起。我已经添加了代码片段 – Jolene

+0

我会试试看。谢谢。我有另一个问题要问..当我在网上运行我的.php时,这些单词也在“???”中。我还必须做某些编码吗?以显示utf-8 .. – Jolene

+0

确保php文件以UTF-8格式保存,并尝试使用' –

1

已解决。你需要用utf8编码你的POST。

if(method == "POST"){ 
      // request method is POST 
      // defaultHttpClient 

      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost(url); 
      httpPost.setEntity(new UrlEncodedFormEntity(params,"utf-8")); <------ utf8 
+0

应该是这个答案 – NPE

2

我的db已经默认为utf8,遇到了同样的问题。

添加通常的元标记“”后,问题仍然存在。

然后,我创建了一个专门的connection.php,以确保所有通信与MySQL的字符集UTF8,注意有没有“ - ”在UTF8在mysqli_set_charset($ BD, 'utf-8')!

Connection.php

<?php 
    $mysql_hostname = "localhost"; 
    $mysql_user = "username"; 
    $mysql_password = "password"; 
    $mysql_database = "dbname"; 
    $prefix = ""; 
    $bd = mysqli_connect($mysql_hostname, $mysql_user, $mysql_password) or die("Could not connect database"); 
    mysqli_select_db($bd, $mysql_database) or die("Could not select database"); 
    if(!mysqli_set_charset($bd, 'utf8')) { 
     exit() ; 
    } 

?> 

这里的发送检索数据的一个例子。

<?php 

    //Include database connection details 
    require_once('connection.php'); 

     enter code here 

    //Create query 
    $qry = "SELECT * FROM subject"; 
    $result = mysqli_query($bd, $qry); 
    // other stuff 
?> 
+0

例子看起来是空的! – Aditya