如何在Android中为JSONObject设置UTF-8字符编码

时间:2017-04-25 15:36:27

标签: android json encoding utf-8

我需要在Android应用程序中以UTF-8字符编码显示文本,这是我的JSONAsyncTask代码:

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

3 个答案:

答案 0 :(得分: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;
 }

答案 1 :(得分:0)

String URL = your_URL;
URL obj = new URL(URL);
HttpURLConnection connection = (HttpURLConnection) obj.openConnection();

connection.setRequestMethod("GET");

BufferedReader in = new BufferedReader(new 
InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));

答案 2 :(得分:-1)

您可以使用 URLEncoder,URLDecoder Jsonobject 进行编码,解码。下面给出了这个例子

1.编码 Jsonobject

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

2.解码 Jsonobject

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