Подтвердить что ты не робот

Как отправлять символы 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)

Как я могу переключить кодировку выходного потока сервлета???

4b9b3361

Ответ 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 );