请求参数编码处理学习笔记

POST请求参数编码处理
  1. 如果浏览器没有在Content-Type标头设置字符编码(eg: Content-Type: text/html;charset=UTF-8)
  2. 此时使用request.getCharacterEncoding()返回值为null
  3. 在这种情况下,容器若使用默认编码处理是ISO-8859-1,而浏览器使用UTF-8发送ASCII字符的请求参数。
  4. 相当于浏览器做了String text = URLEncoder.encode(“林”,“UtF-8”) ;
  5. 而Servlet取得参数,若容器默认使用ISO-8859-1编码,相当于String text = URLDecoder.decode("%E6%9E%97",“ISO-8859-1”) ; 而出现乱码。
  6. 可以使用request.setCharacterEncoding()指定获取POST参数时使用的编码。如果浏览器以UTF-8发送请求,设置request编码后,
    相当于要求容器做了String text = URLDecoder.decode("%E6%9E%97",“UTF-8”) ;这样就能取得正确的“林”中文字符了。
GET请求参数编码处理
  1. request的setCharacterEncoding()无效,是因为处理URI的是HTTP服务器,而非WEB容器。
  2. 在tomcat 7或之前版本附带http服务器处理URI使用默认编码是ISO-8859-1,若浏览器使用UTF-8发送请求。
  3. Servlet中取得请求参数时相当于:String name = URLDecoder.decode("%E6%9E%97",“ISO-8859-1”) ;
  4. 按照String text = new String(name.getByte(“ISO-8859-1”),“UTF-8”) ;就能得到“林”了。
  5. 加深理解代码片段
    @Slf4j
    public class ParameterEncodeDecodeTest {
        @Test
        public void get() throws UnsupportedEncodingException {
            // 1. 浏览器使用UTF-8获取字节数组编码后并发送过来内容
            String info = "%E5%BC%A0%E4%B8%89" ;
            // 2. http服务器使用ISO-8859-1解码,并得到ISO-8859-1字符串
            String decode = URLDecoder.decode(info, "ISO-8859-1");
            log.info("====>  {}", decode);
            // 地到ISO-8859-1字符串之前的UTF-8字节数组,并使用UTF-8转成字符串
            String content = new String(decode.getBytes("ISO-8859-1"), "UTF-8") ;
            log.info("content : {}", content);//张三
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值