关于请求参数编码处理

1.请求参数乱码现象的产生

当客户端使用编码与web容器使用编码不一致时,便有可能产生乱码情况

例一:网页编码使用UTF-8,通过Post方式发出“晴”这个中文字符的参数请求。web容器使用ISO-8859-1处理编码。

相当于浏览器所做操作:

java.net.URLEncoder.encode("晴", "UTF-8");

“晴”按照UTF-8编码为:%E6%99%B4

则相当于web容器所做操作:

java.net.URLDecoder.decode("%E6%99%B4" , "ISO-8859-1");

故此会出现请求参数乱码现象

2.Post请求参数编码处理

在接受任何请求参数之前,执行以下语句(request为HttpServletRequest实例化对象):

request.setCharacterEncoding("UTF-8");

使得容器在接受任何请求参数时,使用UTF-8来处理。即可解决乱码问题

3.Get请求参数编码处理

request.setCharacterEncoding("UTF-8");

以上语句对于Get请求参数乱码问题并不起作用。

why?

在API中,该方法有如下说明:

Overrides the name of the character encoding used in the body of this request

该方法只对请求体中的字符编码起效。故在Get请求时,它并不能解决问题。

依旧针对例一,换作为Get请求,正确的处理方式如为:

String name = request.getParameter("name");
name = new String(name.getBytes("ISO-8859-1"),"UTF-8");

首先通过String的getBytes()获得该字符串的字节数组,再重新构造正确编码的字符串即可。

猜你喜欢

转载自www.cnblogs.com/imwuqing/p/9006162.html