Как отправлять символы ServletOutputStream в кодировке UTF-8
Мой код сервлета выглядит следующим образом:
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)
Как я могу переключить кодировку выходного потока сервлета???
Ответы
Ответ 1
Я думаю, что вы хотите использовать вместо getWriter(). Это примет строку и закодирует ее, тогда как выходной поток предназначен для обработки двоичных данных.
Из документа:
Возвращает объект PrintWriter, который может отправлять текстовый символ клиенту. Используемая кодировка символов - это та, которая указана в свойстве charset = метода 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...);
Ответ 2
Это также работает:
ServletOutputStream out = response.getOutputStream();
out.write("MY-UTF-8 CODE".getBytes("UTF-8"));
Ответ 3
Тот же случай случается со мной раньше, и я пытался добавить одну строку поверх PrintWriter, и это работает.
response.setContentType( "text/html; charset = GBK" );
PrintWriter out = response.getWriter();
Ответ 4
public void output(String jsonStr, HttpServletResponse response) throws IOException {
response.setContentType("text/html;charset=UTF-8;");
response.setCharacterEncoding("UTF-8");
ServletOutputStream out = response.getOutputStream();
out.write(jsonStr.getBytes("UTF-8"));
out.flush();
out.close();
}
Ответ 5
// HTML Output code list
StringBuffer select_code = new StringBuffer();
List<con_element> ccc = codeService.code_select(code);
for(int i=0;i<ccc.size();i++){
select_code.append("<option value='" + ccc.get(i).getCce_num() + "'>" + ccc.get(i).getCce_hname() + "</option>" );
}
response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
response.getWriter().print( select_code );