64 votes

comment envoyer des caractères ServletOutputStream en encodage 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 ???

131voto

Brian Agnew Points 143181

Je pense que vous voulez utiliser getWriter() à la place. Qui accepte une chaîne de caractères et l'encoder, alors que le flux de sortie est pour le traitement binaire des données.

À partir de la doc:

Retourne un objet PrintWriter qui peut envoyer des caractères de texte pour le client. L' l'encodage de caractères utilisé est celui spécifié dans le charset= propriété de le setContentType(java.lang.Chaîne de caractères) la méthode, qui doit être appelée avant l'appel de cette méthode pour le jeu de caractères à prendre effet.

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

12voto

quagmired Points 11

Cela fonctionne également:

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

4voto

Chang Points 52

Le même cas m'arrive 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 ();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X