servlet中文乱码问题之resp.sendError
servlet文件中包含有中文,使用javac进行编译时,要加上-encoding 指定编码格式,才可以编译通过
问题的情况如下:
1 import java.io.IOException; 2 3 import javax.servlet.ServletException; 4 import javax.servlet.http.HttpServlet; 5 import javax.servlet.http.HttpServletRequest; 6 import javax.servlet.http.HttpServletResponse; 7 8 public class LoginServlet extends HttpServlet { 9 @Override 10 protected void doGet(HttpServletRequest req, HttpServletResponse resp) 11 throws ServletException, IOException { 12 resp.setContentType("text/html;charset=UTF-8"); 13 14 String name=req.getParameter("username"); 15 String pwd=req.getParameter("password"); 16 17 if(name!=null&&pwd!=null&&name.equals("dai")&&pwd.equals("123")){ 18 resp.sendRedirect("success.html"); 19 }else{
20 resp.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE, "服务器忙,请稍后再登录!"); 21 } 22 } 23 24 @Override 25 protected void doPost(HttpServletRequest req, HttpServletResponse resp) 26 throws ServletException, IOException { 27 28 doGet(req, resp); 29 } 30 }
上面的if执行到 resp.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE, "服务器忙,请稍后再登录!");
时,会返回给浏览器503错误,然而就储出现乱码了:
然后上网百度,然而并没有发现有这种情况的解决方法,只有自己思索,后来经过改代码里面
resp.setContentType("text/html;charset=gb2312");
resp.setCharacterEncoding("UTF-8");
并没有效果。
后来一想难道是编译的时候指定的编码格式GBK不行,因为如果指定的格式不对,中文解析就不会正确,然后改变编译的指定中文编码格式:
然后编译,重启tomcat
总结:servlet中含有中文的情况,javac编译时要指定正确的编码格式。