Мой код сервлета похож на это:
response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
ServletOutputStream out = response.getOutputStream();
out.println(...MY-UTF-8 CODE...);
...
затем я получаю ошибку:
java.io.CharConversionException: Not an ISO 8859-1 character: ש
javax.servlet.ServletOutputStream.print(ServletOutputStream.java:89)
javax.servlet.ServletOutputStream.println(ServletOutputStream.java:242)
rtm.servlets.CampaignLogicServlet.doPost(CampaignLogicServlet.java:68)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
Как я могу переключить набор символов outputstream Сервлета???
Я думаю, что вы хотите использовать getWriter() вместо этого. Это позволит принять строку и закодировать ее, в то время как выходной поток предназначен для работы с данными binary.
Из документа doc:
Возвращает объект PrintWriter, который может отправить символьный текст клиенту. используется кодировка символов указанный в кодировке=свойство setContentType(java.lang.String) метод, который должен быть назван ранее вызывая этот метод, чтобы кодовая страница вступает в силу.
Либо этот метод, либо getOutputStream() может быть вызвана к пишите тело, а не и то, и другое.
Вот изменение кода:
response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.println(...MY-UTF-8 CODE...);