Android default charset when sending http post/put - Problems with special characters Android default charset when sending http post/put - Problems with special characters android android

Android default charset when sending http post/put - Problems with special characters


Apparently, I forgot to set the StringEntity's charset to UTF-8. These lines did the trick:

    httpPut.setEntity(new StringEntity(body, HTTP.UTF_8));    httpPost.setEntity(new StringEntity(body, HTTP.UTF_8));

So, there are at least two levels to set the charset in the Android client when sending an http post with non-ascii characters.

  1. The rest client itself itself
  2. The StringEntity

UPDATE: As Samuel pointed out in the comments, the modern way to do it is to use a ContentType, like so:

    final StringEntity se = new StringEntity(body, ContentType.APPLICATION_JSON);    httpPut.setEntity(se);


I know this post is a bit old but nevertheless here is a solution:

Here is my code for posting UTF-8 strings (it doesn't matter if they are xml soap or json) to a server. I tried it with cyrillic, hash values and some other special characters and it works like a charm. It is a compilation of many solutions I found through the forums.

HttpParams httpParameters = new BasicHttpParams();HttpProtocolParams.setContentCharset(httpParameters, HTTP.UTF_8);HttpProtocolParams.setHttpElementCharset(httpParameters, HTTP.UTF_8);HttpClient client = new DefaultHttpClient(httpParameters);client.getParams().setParameter("http.protocol.version", HttpVersion.HTTP_1_1);client.getParams().setParameter("http.socket.timeout", new Integer(2000));client.getParams().setParameter("http.protocol.content-charset", HTTP.UTF_8);httpParameters.setBooleanParameter("http.protocol.expect-continue", false);HttpPost request = new HttpPost("http://www.server.com/some_script.php?sid=" + String.valueOf(Math.random()));request.getParams().setParameter("http.socket.timeout", new Integer(5000));List<NameValuePair> postParameters = new ArrayList<NameValuePair>();// you get this later in php with $_POST['value_name']postParameters.add(new BasicNameValuePair("value_name", "value_val"));UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters, HTTP.UTF_8);request.setEntity(formEntity);HttpResponse response = client.execute(request);in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));StringBuffer sb = new StringBuffer("");String line = "";String lineSeparator = System.getProperty("line.separator");while ((line = in.readLine()) != null) {    sb.append(line);    sb.append(lineSeparator);}in.close();String result = sb.toString();

I hope that someone will find this code helpful. :)


You should set charset of your string entity to UTF-8:

StringEntity stringEntity = new StringEntity(urlParameters, HTTP.UTF_8);