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

GyR*_*yRo 50 java servlets utf-8 internationalization

我的servlet代码看起来像这样:

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

...

然后我得到错误:

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)
Run Code Online (Sandbox Code Playgroud)

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

Bri*_*new 100

我想你想要使用getWriter().这将接受一个字符串并对其进行编码,而输出流则用于处理二进制数据.

来自doc:

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

可以调用此方法或getOutputStream()来编写正文,而不是两者.

这是代码的变化:

response.setContentType("text/html; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.println(...MY-UTF-8 CODE...);
Run Code Online (Sandbox Code Playgroud)

  • 不谢谢.别 :-) (9认同)

小智 10

这也有效:

ServletOutputStream out = response.getOutputStream();
out.write("MY-UTF-8 CODE".getBytes("UTF-8")); 
Run Code Online (Sandbox Code Playgroud)