it-swarm.dev

como enviar por meio de caracteres ServletOutputStream na codificação UTF-8

Meu código de servlet se parece com isso:

response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
ServletOutputStream out = response.getOutputStream();
out.println(...MY-UTF-8 CODE...);

...

então eu recebo o erro:

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)

Como posso mudar o conjunto de caracteres da saída do Servlet ???

47
GyRo

Eu acho que você quer usar getWriter () em vez disso. Isso irá aceitar uma string e codificá-la, enquanto o fluxo de saída é para manipular os dados binary.

Do doc:

Retorna um objeto PrintWriter que pode Enviar o texto do caractere para o cliente. A codificação de caracteres Usada é aquela Especificada na propriedade charset = Do método setContentType (Java.lang.String) , Que deve ser chamado antes chamando esse método para o charset para entrar em vigor.

Esse método ou GetOutputStream () pode ser chamado para Gravar o corpo, não ambos.

Aqui está a mudança do código:

response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.println(...MY-UTF-8 CODE...);
88
Brian Agnew

Isso também funciona:

ServletOutputStream out = response.getOutputStream();
out.write("MY-UTF-8 CODE".getBytes("UTF-8")); 
8
quagmired

O mesmo caso acontece comigo antes e eu tentei adicionar uma linha em cima do PrintWriter e é trabalho. 

response.setContentType ("text/html; charset = GBK"); 
PrintWriter out = response.getWriter ();

3
Chang
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();
}
0
Allen