UTF-8 encoding in Volley Requests

后端 未结 8 1473
天命终不由人
天命终不由人 2020-12-06 02:17

In my Android app I am loading json data with a Volley JsonArrayRequest. The data were created by myself and I saved them with Sublime with UTF-8 encoding. When

相关标签:
8条回答
  • 2020-12-06 02:29

    another approach: you can encode your whole response by this line of code.

    newStr = URLDecoder.decode(URLEncoder.encode(oldStr, "iso8859-1"),"UTF-8");
    

    I have encoded whole response string into UTF-8 as I know volley default encode method is iso8859-1

    0 讨论(0)
  • 2020-12-06 02:30

    I have same problem like this and i solve it using UTF-8 charset.

    String str = "";
    try {
         str = new String(strFromService.getBytes("ISO-8859-1"), "UTF-8");
    } catch (UnsupportedEncodingException e) {
    
     e.printStackTrace();
    }
    
    String decodedStr = Html.fromHtml(str).toString();
    

    I hope this will work for you

    0 讨论(0)
  • 2020-12-06 02:34

    donot use try{} catch in the onResponse block, that is giving some problem in my code , rather than that you can implement like this .

    @Override 
    onResponse(String s) {
    
    s= fixEncoding(s);
    Toast.makeToast(this,s,Toast.LENGTH_LONG).show();
    
    }
    

    and i think you will get the required result

     public static String fixEncoding(String response) {
                try {
                    byte[] u = response.toString().getBytes(
                            "ISO-8859-1");
                    response = new String(u, "UTF-8");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                    return null;
                }
                return response;
            }
    
    0 讨论(0)
  • 2020-12-06 02:40

    If you know that absolutely all of the files you are requesting will be in the UTF-8 format, which it sounds like you do, then you might consider forcing your Volley request to return UTF-8 formatted strings. You could accomplish this by subclassing the standard JSON request. Something like this:

    public class Utf8JsonRequest extends JsonRequest<JSONObject> {
        ...
        @Override
        protected Response<JSONObject> parseNetworkResponse (NetworkResponse response) {
            try {
                String utf8String = new String(response.data, "UTF-8");
                return Response.success(new JSONObject(utf8String), HttpHeaderParser.parseCacheHeaders(response));
            } catch (UnsupportedEncodingException e) {
                // log error
                return Response.error(new ParseError(e));
            } catch (JSONException e) {
                // log error
                return Response.error(new ParseError(e));
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-06 02:40

    I had the same problem earlier two days ago and i have tried every thing my friends just said and it`s the same problem and i tried so meany things .. my file is written in php and using volley to get the data as json i followed these steps to solve the problem ..

    1. before executing the query in your database write this query

      mysqli_query($this->connection,"set_NAMES_utf8");

    2. use this header in your file if it`s php

      header('Content-Type: application/json ; charset=utf-8 ');

    3. while you are echoing the json according to php there is a solve for this problem use this special charachter in json_encode($json,JSON_UNESCAPED_UNICODE)

      i hope it helped

    0 讨论(0)
  • 2020-12-06 02:44

    Add this line of code inside response of volley :

     public void onResponse(String response) 
        {
    
         if (response != null) 
          {
            response=new String(response.getBytes("ISO-8859-1"), "UTF-8");
          }
       }
    
    0 讨论(0)
提交回复
热议问题