关于请求参数编码处理

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");
复制代码

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


转载于:https://juejin.im/post/5aef1537f265da0ba76fa454

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值