解决 response.setCharacterEncoding("utf-8"),不生效的问题
程序员文章站
2022-03-23 12:30:18
...
前提:正在复习ServletContext,获取到servletContext对象设置的Attribute以后,把它输出到网页上,发现是乱码。
/**
* @author Claw
*/
public class OtherServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = this.getServletContext();
String name = (String) context.getAttribute("name");
PrintWriter respWriter = resp.getWriter();
resp.setContentType("text/html; charset=utf-8");
respWriter.println(name+"--------------正在开发");
}
}
可以看到编码仍然是ISO-8859-1,说明设置未生效。
根据这篇博客,解决了我的问题
解决为什么已经设置了request.setCharacterEncoding(“utf-8”);POST请求仍然乱码的问题
进行请求编码设置,这是最简单的,需要注意的问题就是不要在获取请求参数之后设置请求编码
若已获取请求参数,此时还没有设置过编码,Tomcat会设置默认Post请求参数编码为ISO8859_1,那么你再设置成UTF-8也无效了,还是ISO-8859-1
是说一开始就要设置好编码,所以我更改了代码顺序,把编码提到最前。
public class OtherServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = this.getServletContext();
resp.setContentType("text/html; charset=utf-8");
String name = (String) context.getAttribute("name");
PrintWriter respWriter = resp.getWriter();
respWriter.println(name + "--------------正在开发");
}
}
这下正常了
搜过其他答案
说可以这样设置能解决未生效的问题,对于我而言无法解决,还是顺序的问题。
resp.setContentType("text/html; charset=utf-8");
用 setCharacterEncoding("utf-8")
可以也能生效,这两个一样的。
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html")