Изменить кодировку HttpServletResponse - PullRequest
18 голосов
/ 04 декабря 2009

У меня есть API, который возвращает XML, он на самом деле возвращает его, используя кодировку по умолчанию (я считаю, что это UTF-8), но теперь требования изменились, и нам нужно вернуть все в UTF-16LE.

Мой вопрос: есть ли простой способ сделать это? У меня есть доступ к ответу непосредственно перед завершением звонков, поэтому мне было интересно, могу ли я сделать что-то вроде

//This method does not exist
response.setCharacterEncoding("UTF-16LE");

Большое спасибо!

UPDATE: Упомянутый метод - тот, который нужно использовать. Я использовал старую версию (2.3) API сервлета, которая не включала его. Смена версии все исправила.

Ответы [ 4 ]

20 голосов
/ 04 декабря 2009

Э-э, метод существует , здесь

Устанавливает кодировку символов (MIME charset) ответа, отправляемого клиент, например, в UTF-8. Если кодировка символов уже был установлен setContentType (java.lang.String) или setLocale (java.util.Locale), это метод переопределяет это. призвание setContentType (java.lang.String) с Строка текста / HTML и вызова этот метод со строкой UTF-8 эквивалентно вызову setContentType со строкой текст / html; кодировка = UTF-8.

14 голосов
/ 26 августа 2013

Как уже говорили другие, используйте:

response.setCharacterEncoding("UTF-16LE");

или

response.setHeader("Content-Type", "text/xml; charset=UTF-16LE");

... но убедитесь, что вы делаете это до вызова response.getWriter (); ...!

9 голосов
/ 04 декабря 2009

Первый

response.setHeader("Content-Type", "text/xml; charset=UTF-16LE");

Затем убедитесь, что вы на самом деле излучаете эту кодировку!

0 голосов
/ 04 марта 2015

просто сделайте следующее:

byte[] k =xml.getBytes("UTF-16"); // xml is the string with unicode content.  getBytes("UTF-16") encodes given String into a sequence of bytes and returns an array of bytes. you can use xml.getBytes(UTF8_CHARSET); for utf-8 encoding

response.setContentType("text/xml");
response.setContentLength(k.length);
response.getOutputStream().write(k);
response.getOutputStream().flush();
response.getOutputStream().close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...