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)
小智 10
这也有效:
ServletOutputStream out = response.getOutputStream();
out.write("MY-UTF-8 CODE".getBytes("UTF-8"));
Run Code Online (Sandbox Code Playgroud)