Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

I have a servlet that sends a string with utf-8 encoding. Also I have a client written with apache httpcomponents library.

My problem is reading the response in utf-8. Some special characters like ñ or ç are not read correctly. If I test the server with an html page sending a request, the string is correct and the encoding is UTF-8 without BOM.

Some snippets: Servlet

response.setContentType ("application/json; charset=UTF-8");
PrintWriter out = response.getWriter ();
out.write (string);

Client

entity = response.getEntity ();
entity.getContentEncoding (); //returns null
resultado = EntityUtils.toString (entity, HTTP.UTF_8); //Some characters are wrong

Has anyone had the same problem?

SOLVED: Sorry guys the client and server were working correctly. I'm writting an android app and it seems that the logcat (where I print the messages) doesn't support utf-8 encoding.

share|improve this question

2 Answers 2

Have you tried

response.setCharacterEncoding("utf-8");

instead of setting the encoding via setContentType? It shouldn't make a difference according to the documentation, but who knows...

Also, make sure you didn't call response.getWriter() anywhere in your code before setting the character encoding, because the latter would not have any effect in that case.

share|improve this answer
    
Yes :( <padding> –  Gabriel Llamas Dec 14 '10 at 22:21
1  
Can you identify whether the problem is on the servlet side or on the client side? –  Thomas Dec 14 '10 at 22:22
1  
Yeah you should check it out with something like Wireshark. –  Hiro2k Dec 14 '10 at 22:27
    
I've also tested the connection with wireshark and I've seen that the special characters are sended incorrectly, but firefox shows it correctly :S. Tested with setCharacterEncoding and text/plain content-type but still fails. –  Gabriel Llamas Dec 14 '10 at 23:07

Make sure stream bytes are in UTF-8 format:

out.write((yourstring.getBytes("UTF-8"));
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.