由于在JSP中默认的编码格式是ISO-8859-1,也就是request.getParameter("username");都是按照ISO-8859-1的编码格式来的。就算你把charset与pageEncoding设置成了UTF-8也不起作用的。如:
String username = request.getParameter("username");
//String username = new String(request.getParameter("username").getBytes("ISO-8859-1"), "UTF-8");
String password = request.getParameter("password");
Integer age = Integer.parseInt(request.getParameter("age"));
String sex = request.getParameter("sex");
//System.out.println(new String(sex.getBytes("ISO-8859-1"), "UTF-8"));
System.out.println("username=" + username + "sex=" + sex);
在上这个JSP中,处理客户端传递过来的参数username与sex时,如果username为中文,那么此时的username这个字符串会出现乱码的情况,sex字段同理。解决方案:
方案一:
在所有的request.getParameter();之前加上:request.setCharacterEncoding("UTF-8");
特别注意:一定是所有的request.getParameter();之前,比如:
Integer age = Integer.parseInt(request.getParameter("age"));
request.setCharacterEncoding("UTF-8");
String sex = request.getParameter("sex");
虽然age不会是中文,然后你在age字段的下面加上request.setCharacterEncoding("UTF-8");这个时候是不会起作用的。sex还是会出现乱码。正确示范:
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
Integer age = Integer.parseInt(request.getParameter("age"));
String sex = request.getParameter("sex");
方案二:
先根据原来的ISO-8859-1的编码方式解码之后,再重新编码。比方案一繁琐,不推荐。
a)
String username = request.getParameter("username");
byte[] bytes = username.getBytes("ISO-8859-1");
username= new String(bytes,"UTF-8");
b)
String username = new String(request.getParameter("username").getBytes("ISO-8859-1"), "UTF-8");
String sex = new String(request.getParameter("sex").getBytes("ISO-8859-1"), "UTF-8");