如何通过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(); }