2011-09-09 14 views
5

Tengo una aplicación de Android que te permite publicar tu nombre en un sitio web a pesar de que formulo una solicitud HTTP POST al sitio web. El problema es que el 90% de mis clientes son suecos y la solicitud POST parece cortar todo después de un carácter especial en una cadena, incluido el carácter especial en sí.Los caracteres especiales desaparecen en la solicitud POST desde un teléfono Android

Así que el apellido sueco "Börjesson", se convierte en "B".

mi post código de solicitud:

public static String execRequest(String url, Map<String, String> params) 
{ 
    try { 
     DefaultHttpClient defaultHttpClient = new DefaultHttpClient(); 
     HttpPost httpPost = null; 
     HttpGet httpGet = null; 
     if(params == null || params.size() == 0) { 
      httpGet = new HttpGet(url); 
      httpGet.setHeader("Accept-Encoding", "UTF-8"); 
     } 
     else { 
      httpPost = new HttpPost(url); 
      httpPost.setHeader("Accept-Encoding", "UTF-8"); 
       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
      for(String key: params.keySet()) { 
       nameValuePairs.add(new BasicNameValuePair(key, params.get(key))); 
      } 
      httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     } 
     HttpResponse httpResponse = (HttpResponse)defaultHttpClient.execute(httpPost == null ? httpGet : httpPost); 
     HttpEntity httpEntity = httpResponse.getEntity(); 
     if(null != httpEntity) { 
      InputStream inputStream = httpEntity.getContent(); 
      Header contentEncoding = httpResponse.getFirstHeader("Content-Encoding"); 
      if(contentEncoding != null && contentEncoding.getValue().equalsIgnoreCase("UTF-8")) { 
       inputStream = new GZIPInputStream(inputStream); 
      } 
      String responseString = convertStreamToString(inputStream); 
      inputStream.close(); 
       return responseString; 
     } 
    } 
    catch(Throwable t) { 
     t.printStackTrace(); 
    } 
    return null; 
} 

Por lo tanto, algunos consejos de lo que estoy haciendo mal?

¡Gracias de antemano!

+1

hicieron que trató 'httpPost.setEntity (nueva UrlEncodedFormEntity (nameValuePairs), "UTF-8");' – Selvin

+0

No puedo encontrar ninguna función que tiene ese parámetro ... – Mockarutan

+1

maldiga mi mala no setEntity bat UrlEncodedXXX constructor 'httpPost.setEntity (new UrlEncodedFormEntity (nameValuePairs," utf-8 "));' – Selvin

Respuesta

6

Uso httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "utf-8"));

+0

Publique una respuesta como wiki de la comunidad. Por favor aceptalo. – Yury

Cuestiones relacionadas