关于使用servlet的乱码问题
我最近观察到个现象:
post提交,servlet这样写:输出会乱码,很正常对吧。
@WebServlet("/testServlet")
public class testServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String address = request.getParameter("address");
System.out.println(username + " " + address);
//输出会乱码这是姓å 这是地å
}
}
我在获取参数之前加个 request.setCharacterEncoding("utf-8");
肯定能解决了对吧。没问题,这就是书上教的那些。但如果我把这句话放在他们之间会怎么样?
String username = request.getParameter("username");
request.setCharacterEncoding("utf-8");
String address = request.getParameter("address");
System.out.println(username + " " + address);
//输出结果:这是姓å 这是地å€
疑问来了:我以为只有第一个不会被正确输出,第二个应该是中文。
但实际上是这样的,两个都是乱码
我把第二个参数用那个get,post通用解决乱码的方法,也就是加入第四行的代码:
String username = request.getParameter("username");
request.setCharacterEncoding("utf-8");
String address = request.getParameter("address");
address = new String(address.getBytes("ISO-8859-1"), "UTF-8");
System.out.println(username + " " + address);
//输出:这是姓å 这是地址
当然,这种解决乱码的方式放在username上也是可以生效的。
总结:
所以为什么会出现这种情况?使用request.setCharacterEncoding(“utf-8”);为什么不能放在他们之间,
或者说为什么获取了一次参数之后,这个方法好像没有生效一样。我的测试在很多个tomcat版本上都试过(7,8,9),同样的结果。