views:

825

answers:

1

My servlet code looks like that:

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

...

then I get the error:

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)

How can I switch the charset of Servlet's outputstream ???

+4  A: 

I think you want to use getWriter() instead. That will accept a string and encode it, whereas the output stream is for handling binary data.

From the doc:

Returns a PrintWriter object that can send character text to the client. The character encoding used is the one specified in the charset= property of the setContentType(java.lang.String) method, which must be called before calling this method for the charset to take effect.

Either this method or getOutputStream() may be called to write the body, not both.

Brian Agnew
Tried it - It worked!Took you less then 5 min. to solve it. I'll try to find harder question next time...
Guy Roth
No. Please. Don't :-)
Brian Agnew
+1 - awesome work.
duffymo
doesn't explain why the OP's code didn't work, though
skaffman
@skaffman - yes. But "MY-UTF-8 CODE" needs to be expanded for that :-)
Brian Agnew