2017-04-25 305 views
0

我需要显示在Android应用程序中UTF-8字符编码的文字,这里是我的JSONAsyncTask代码:如何设置字符编码成UTF-8的JSONObject在Android

class JSONAsyncTask extends AsyncTask<String, Void, Boolean> { 

    ProgressDialog dialog; 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     dialog = new ProgressDialog(getActivity()); 
     dialog.setMessage("Wait..."); 
     dialog.setTitle("Loading"); 
     dialog.show(); 
     dialog.setCancelable(false); 
    } 

    @Override 
    protected Boolean doInBackground(String... urls) { 
     try { 
      HttpGet httppost = new HttpGet(urls[0]); 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpResponse response = httpclient.execute(httppost); 
      int status = response.getStatusLine().getStatusCode(); 
      if (status == 200) { 
       HttpEntity entity = response.getEntity(); 
       String data = EntityUtils.toString(entity); 
       JSONObject jsono = new JSONObject(data); 
       JSONArray jarray = jsono.getJSONArray("news"); 
       for (int i = 0; i < jarray.length(); i++) { 
        JSONObject object = jarray.getJSONObject(i); 

        News news = new News(); 

        news.setTitle(object.getString("title")); 
        news.setDescription(object.getString("description")); 
        news.setDate(object.getString("date")); 
        news.setImage(object.getString("image")); 

        newsList.add(news); 
       } 
       return true; 
      } 

     } catch (ParseException e1) { 
      e1.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     return false; 
    } 

中当然,之前我问,研究和看到这些结果:

等等......但是,这答案不能解决我的问题。

Screenshot

+0

为什么这些结果可以帮助您解决您的问题?你能澄清这个问题吗? – compte14031879

+0

仍然在我的问题和字符没有编码为utf-8。 –

+0

@FrédéricLetellier请参阅ScreenShot。 –

回答

0

最后我我解决我的问题。

最终代码:

@Override 
    protected Boolean doInBackground(String... urls) { 

    try { 
     HttpGet httppost = new HttpGet(urls[0]); 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpResponse response = httpclient.execute(httppost); 
     int status = response.getStatusLine().getStatusCode(); 

变化状态:

  if (status == HttpStatus.SC_OK) { 

      HttpEntity entity = response.getEntity(); 

编辑此代码:

   String data = EntityUtils.toString(response.getEntity(), cz.msebera.android.httpclient.protocol.HTTP.UTF_8); 
      JSONObject jsono = new JSONObject(data); 
      JSONArray jarray = jsono.getJSONArray("news"); 
      for (int i = 0; i < jarray.length(); i++) { 
       JSONObject object = jarray.getJSONObject(i); 

       News news = new News(); 

       news.setTitle(object.getString("title")); 
       news.setDescription(object.getString("description")); 
       news.setDate(object.getString("date")); 
       news.setImage(object.getString("image")); 

       newsList.add(news); 
      } 
      return true; 
     } 
    } catch (ParseException e1) { 
     e1.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    return false; 
} 
0

你可以简单的编码,解码使用的URLEncoder,URLDecoder的JSONObject。这个例子给出了下面

1.Encode的的JSONObject

try 
    { 
     String encoded = URLEncoder.encode(jsonobject, "UTF-8"); 
     Log.e("UTF 8",encoded); 
    } 
    catch (UnsupportedEncodingException e) 
    { 
     Log.e("utf8", "conversion", e); 
    } 

2.Decode的的JSONObject

try 
    { 
     String decoded = URLDecoder.decode(jsonobject, "UTF-8"); 
     Log.e("UTF 8",decoded); 
    } 
    catch (UnsupportedEncodingException e) 
    { 
     Log.e("utf8", "conversion", e); 
    } 
+0

不工作...... :( –