关于Servlet的输出中文乱码问题

最近在看一个java教程,跟着里面写了一段Servlet代码:

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("处理GET请求");
        PrintWriter out = resp.getWriter();
        resp.setContentType("text/html;charset=UTF-8");
        out.println("<h1>这是一个SERVLET</h1>");
    }

但是在访问这个Servlet页面的时候,中文变成了问号?了。

在网上查了各种资料。都是说response.setContentType()和response.setCharacterEncoding()两个方法的。怎么改都不行。

后来无意中才发现是调用顺序反了!!!

上面的这段代码,先获取了response的PrintWriter对象,这时候已经默认为ISO-8859-1编码了。在之后才调用setContentType来设置response的输出字符编码就根本不起作用了。

所以正确地顺序应该是在response.getWriter()之前,就应该先调用setCharacterEncoding()或者setContentType()方法来设置字符编码。

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("处理GET请求");
        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter out = resp.getWriter();
        out.println("<h1>这是一个SERVLET</h1>");
    }

 

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top