Проблема кодировки UTF-8 с сервлетом и apache HttpClient - PullRequest
3 голосов
/ 15 декабря 2010

У меня есть сервлет, который отправляет строку с кодировкой utf-8. Также у меня есть клиент, написанный с помощью библиотеки Apache httpcomponents.

Моя проблема - чтение ответа в utf-8. Некоторые специальные символы, такие как ñ или ç, не читаются правильно. Если я тестирую сервер с помощью html-страницы, отправляющей запрос, строка верна и кодировка UTF-8 без спецификации.

Некоторые фрагменты: Servlet

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

Клиент

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

У кого-нибудь была такая же проблема?

РЕШИТЬ: Извините, ребята, клиент и сервер работали правильно. Я пишу приложение для Android, и кажется, что logcat (где я печатаю сообщения) не поддерживает кодировку utf-8.

Ответы [ 3 ]

7 голосов
/ 15 декабря 2010

Вы пробовали

response.setCharacterEncoding("utf-8");

вместо установки кодировки с помощью setContentType? Это не должно иметь значения согласно документации, но кто знает ...

Кроме того, убедитесь, что вы не вызывали response.getWriter() нигде в вашем коде, прежде чем устанавливать кодировку символов, поскольку последний не будет иметь никакого эффекта в этом случае.

3 голосов
/ 07 июня 2012

Убедитесь, что байты потока имеют формат UTF-8:

out.write((yourstring.getBytes("UTF-8"));
1 голос
/ 04 октября 2017

StandardCharsets.UTF_8 можно использовать с EntityUtil для получения правильной кодировки.

Вот пример кода:

HttpEntity entity = response.getEntity();
String webpage = EntityUtils.toString(entity, StandardCharsets.UTF_8);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...