volley jsonobjectrequest android encoding utf-8 android-volley

android - jsonobjectrequest - Codificación UTF-8 en solicitudes de Volley



android volley post json (7)

Esto funcionó como un encanto para mí. Acabo de crear un método estático de la respuesta de @Muhammad Naeem. Gracias Muhammed.

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

En mi aplicación de Android estoy cargando datos json con un Volley JsonArrayRequest . Los datos fueron creados por mí mismo y los guardé con Sublime con codificación UTF-8. Cuando recibo la Response y llevo mi ListView , los textos no se muestran correctamente (diéresis). Así es como se ve mi solicitud:

JsonArrayRequest request = new JsonArrayRequest(targetUrl, new Response.Listener<JSONArray>() { @Override public void onResponse(final JSONArray response) { try { fillList(response); } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }); requestQueue.add(request);

Cuando cargo exactamente los mismos datos con este método, todos los textos se muestran correctamente:

final StringBuilder builder = new StringBuilder(); final HttpClient client = new DefaultHttpClient(); final HttpGet httpGet = new HttpGet(request); try { final HttpResponse response = client.execute(httpGet); final StatusLine statusLine = response.getStatusLine(); int statusCode = statusLine.getStatusCode(); if (statusCode == 200) { final HttpEntity entity = response.getEntity(); final InputStream content = entity.getContent(); final BufferedReader reader = new BufferedReader(new InputStreamReader(content)); String line; while ((line = reader.readLine()) != null) { builder.append(line); } } else { } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }

Entonces, para mí, parece que no hay ningún problema con la codificación de mi archivo json. ¿Cómo puedo solucionar este problema de codificación en Volley?


No use try {} catch en el bloque onResponse, eso está dando algún problema en mi código, en lugar de que pueda implementar de esta manera.

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

y creo que obtendrás el resultado requerido

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; }


Para especificar en la parte del servidor, establezca utf-8 en el tipo de contenido como "text / html; charset = utf-8"


Si sabe que absolutamente todos los archivos que está solicitando estarán en el formato UTF-8, lo que parece que es, entonces puede considerar forzar su solicitud de Volley para devolver cadenas con formato UTF-8. Puede lograr esto subclasificando la solicitud JSON estándar. Algo como esto:

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)); } } }


Tengo el mismo problema así y lo resuelvo usando el juego de caracteres UTF-8.

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

Espero que esto funcione para tí


Tuve el mismo problema hace dos días y he intentado todo lo que mis amigos acaban de decir y es el mismo problema y he intentado cosas tan malas ... mi archivo está escrito en php y usa voley para obtener los datos como json i siguió estos pasos para resolver el problema ...

  1. antes de ejecutar la consulta en su base de datos, escriba esta consulta

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

  2. utiliza este encabezado en tu archivo si es php

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

  3. Mientras haces eco del json de acuerdo con php hay una solución para este problema usa este charachter especial en json_encode($json,JSON_UNESCAPED_UNICODE)

    espero que haya ayudado


otro enfoque: puede codificar toda su respuesta por esta línea de código.

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

He codificado cadena de respuesta completa en UTF-8, ya que sé que el método de codificación por defecto de volley es iso8859-1