欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

解决 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,说明设置未生效。
解决 response.setCharacterEncoding("utf-8"),不生效的问题
根据这篇博客,解决了我的问题
解决为什么已经设置了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 + "--------------正在开发");

    }
}

这下正常了
解决 response.setCharacterEncoding("utf-8"),不生效的问题
搜过其他答案
说可以这样设置能解决未生效的问题,对于我而言无法解决,还是顺序的问题。

    resp.setContentType("text/html; charset=utf-8");

setCharacterEncoding("utf-8")可以也能生效,这两个一样的。

        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html")
相关标签: BUG