请求参数的编码处理基本上必须分post与get的情况来说明。
1、post请求参数的编码处理
如果客户端没有在Content—Type标头中设置字符编码信息(例如浏览器可以设置Content—Type:text/html;chartset=UTF-8),此时可以使用HttpServletRequest的getCharacterEncoding()返回值回事null。在这种情况下,容器默认的编码处理是ISO-8859-1。而客户端使用UTF-8发送非ASCII字符的请求参数,Servlet直接使用getParamets()等方法取得该请求参数,就会是不正确的结果也就是得到乱码。
可以使用HttpServletRequest的setCharacterEncoding()方法指定取得Post请求参数时使用的编码。例如,若浏览器以UTF-8来发送请求,则接收时也使用UTF-8编码字符串,则可以在取得任何请求值之前,执行以下语句:
req.setCharacterEncoding("UTF-8");
2、get请求参数的编码处理
在HttpServletRequest的API文件中,对setCharacterEncoding()的说明清楚提到:Overrides
the name of the character encoding used in the body of this request.
也就是说,这个方法对于请求Body中的字符编码才有作用,也就是基本上这个方法只对Post产生作用,当请求是用get发送时,则没有定义这个方法是否会影响Web容器处理编码的方式(究其原因,是因为处理URL的是HTTP服务器,而非Web容器)。
可以使用以下执行语句:
String name =
req.getParameter("name");
String name = new String
(name.getBytes("IS0-8859-1"),"UTF-8");