2013-05-14 149 views
2

我无法从SQL数据库解析阿拉伯文/波斯文本。一切都设置为UTF-8。我的SQL数据库文本设置为utf8_general_ci。 JSON解析器也设置为UTF-8。Parse Json阿拉伯文本

文本显示英文良好。但是当我在数据库中使用阿拉伯语/波斯语文本时,android显示文本为???????

public class JSONParser { 

    static InputStream is = null; 
    static JSONObject jObj = null; 
    static String json = ""; 

    // constructor 
    public JSONParser() { 

} 

// 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, "UTF-8"), 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; 

} 

}

+0

它是如何存储在服务器,什么是列类型 - VARCHAR或CLOB/BLOB? – 2013-05-14 16:03:00

+0

我尝试了varchar和text – 2013-05-15 06:33:04

回答

0

也许问题是在服务器端。检查从服务器获取的原始字符串,看看它是否格式正确。

0

我认为它可以通过将其作为clob/blob存储来帮助你,因为一旦你有了在服务器端从UTF-8传来的字节,任何客户端代码也可以使用各种字符串编码格式来显示测试。

或者我的其他建议,使用webview来显示它,它更成熟地处理这些细微差别。

2

我一直在r & d一天左右,最后成功解析我的阿拉伯语json响应从服务器获取使用以下代码。所以,可能对您有所帮助。

HttpParams params = new BasicHttpParams(); 
    HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); 
    HttpProtocolParams.setContentCharset(params, "UTF-8"); 
    params.setBooleanParameter("http.protocol.expect-continue", false); 
    HttpClient httpclient = new DefaultHttpClient(params); 

    HttpPost httppost = new HttpPost(Your_URL); 
    HttpResponse http_response= httpclient.execute(httppost); 

    HttpEntity entity = http_response.getEntity(); 
    String jsonText = EntityUtils.toString(entity, HTTP.UTF_8); 

    Log.i("Response", jsonText); 

现在,使用jsonText为您的进一步要求。

谢谢