如何通过UTF-8编码通过ServletOutputStream字符发送

我的servlet代码如下所示:

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) 

如何切换Servlet输出stream的字符集?

我想你想用getWriter()来代替。 这将接受一个string并对其进行编码,而输出stream用于处理二进制数据。

从文档:

返回可以将字符文本发送到客户端的PrintWriter对象。 使用的字符编码是在setContentType(java.lang.String)方法的charset =属性中指定的字符编码,在调用此方法以使charset生效之前必须调用该编码。

可以调用这个方法或getOutputStream()来写入正文,而不是两个。

这里是代码的变化:

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

这也适用:

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

同样的情况发生在我之前,我试图在PrintWriter的顶部添加一行,这是工作。

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

 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(); }