web-dev-qa-db-fra.com

comment envoyer par l'intermédiaire de caractères ServletOutputStream au codage UTF-8

Mon code de servlet ressemble à ça:

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

...

alors j'obtiens l'erreur:

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)

Comment puis-je changer le jeu de caractères du flux de sortie de Servlet ???

47
GyRo

Je pense que vous voulez utiliser getWriter () à la place. Cela acceptera une chaîne et l'encodera, alors que le flux de sortie sert à gérer les données binary.

De la doc:

Retourne un objet PrintWriter qui peut envoyer un texte de caractère au client. Le Le codage de caractères utilisé est celui spécifié dans le charset = propriété de le setContentType (Java.lang.String) méthode, qui doit être appelée avant appelant cette méthode pour le jeu de caractères à prendre effet.

Soit cette méthode ou getOutputStream () peut être appelé écrivez le corps, pas les deux.

Voici le changement de code:

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

Cela fonctionne aussi:

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

Le même cas m'est arrivé avant et j'ai essayé d'ajouter une ligne au-dessus du PrintWriter et c'est du travail. 

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