最近在看一个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>"); }