studio strings escape characters arreglo array amp android xml utf-8 special-characters

android - strings - Publicar datos codificados en UTF-8 en el servidor pierde ciertos caracteres



strings.xml android studio (6)

Cuando haces esta linea

form = new UrlEncodedFormEntity(nameValuePairs);

necesitas especificar el juego de caracteres como este

form = new UrlEncodedFormEntity(nameValuePairs,"UTF-8");

Usted puede ir a Android Developer descubrir.

Construye una nueva UrlEncodedFormEntity con la lista de parámetros con la codificación predeterminada de DEFAULT_CONTENT_CHARSET

Estoy trabajando en un proyecto que incluye la comunicación del servidor (aplicación JavaEE) y el cliente (aplicación Android). XML se envía como uno de los parámetros POST de la solicitud HTTP (llamado "xml"). También hay algunos otros parámetros POST que paso al servidor, pero en la función siguiente los eliminé por simplicidad. El problema que ocurre es que ciertas letras no se entregan correctamente al servidor, por ejemplo, el carácter Ű ( Ű cuenta que esto no es Ü alemán, que se entrega correctamente, por cierto). El código para enviar es el siguiente:

private String postSyncXML(String XML) { String url = "http://10.0.2.2:8080/DebugServlet/DebugServlet"; HttpClient httpclient = new DefaultHttpClient(); List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair("xml",XML)); UrlEncodedFormEntity form; try { form = new UrlEncodedFormEntity(nameValuePairs); form.setContentEncoding(HTTP.UTF_8); HttpPost httppost = new HttpPost(url); httppost.setEntity(form); HttpResponse response = (HttpResponse) httpclient .execute(httppost); HttpEntity resEntity = response.getEntity(); String resp = EntityUtils.toString(resEntity); Log.i(TAG,"postSyncXML srv response:"+resp); return resp; } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; }

Mi conjetura es que el problema está en BasicNameValuePair que utilizo para establecer XML como uno de los parámetros POST, y su documentación dice que usa el conjunto de caracteres US-ASCII. ¿Cuál es la forma correcta de enviar campos POST codificados en UTF-8?


Después de mucha investigación e intentos de hacer que las cosas funcionen, finalmente encontré una solución para el problema, que es una adición simple al código existente. La solución fue usar el parámetro "UTF-8" en el constructor de la clase UrlEncodedFormEntity:

form = new UrlEncodedFormEntity(nameValuePairs,"UTF-8");

Después de este cambio, los caracteres se codificaron y se entregaron correctamente en el lado del servidor.


Este ha sido el problema al enviar datos UTF-8 desde Android. Su código funcionaría bien, excepto que tendrá que codificar su String a Base64 . En el servidor PHP simplemente descodifica la cadena Base64 . Funciono para mi Puedo compartir si necesitas el código.


O puedo agregar el siguiente código en scriptlet en la parte superior de mi test2.jspx que resolverá el problema

String en = request.getCharacterEncoding(); if(en == null) { request.setCharacterEncoding("UTF-8"); }


También me enfrenté a un problema similar. Pero para verificarlo, escribí a continuación dos JSPs.

------------- test1.jspx -----------------

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"> <jsp:directive.page contentType="text/html; charset=utf-8"/> <body> <form action="/test2.jspx" method="POST" accept-charset="UTF-8"> <input type="text" name="u" id="u" /> <input type="submit" value="Login3" /> </form> </body> </html> -------------test2.jspx----------------- <html xmlns="http://www.w3.org/1999/xhtml" xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"> <jsp:directive.page contentType="text/html; charset=utf-8"/> <body> The test entered is <jsp:expression>request.getParameter("u")</jsp:expression> </body> </html> ----------------------------------

Y luego ingrese debajo de los caracteres acentuados en el primer cuadro de entrada ÂÃÄÀÁÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ

Y el problema es claramente visible que el navegador de Android no puede manejar la codificación UTF-8 en los parámetros POST.

Creo que tendré que usar el método GET y tendré que agregar "URIEncoding = UTF-8" para el conector en tomcat server.xml.


String finalString = URLEncoder.encode(request, "UTF-8"); return finalString;

Usuario finalString en su método de publicación.