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
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
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
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;
}
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));
}
}
}
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 ..
before executing the query in your database write this query
mysqli_query($this->connection,"set_NAMES_utf8");
use this header in your file if it`s php
header('Content-Type: application/json ; charset=utf-8 ');
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
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");
}
}