So here is the situation: you build up some JSON objects and pop them into a StringEntity so your HTTPClient can send the stuff to server. We know on Android, the default charset is UTF-8 and use that knowledge through out the whole application, not considering that this fact might change in some places. But it does! Using a default StringEngtity with data supposed to be encoded in UTF-8 won't give us the expected results on Android. A look into the code explains why:
// ... if (charset == null) { charset = HTTP.DEFAULT_CONTENT_CHARSET; } // ...
And guess what, HTTP.DEFAULT_CONTENT_CHARSET
does not take advantage of Charset.defaultCharset()
but instead is set up with "ISO-8859-1"
.
To get real UTF-8 data we need to do something like new StringEntity("âáàéèê", HTTP.UTF_8);
.