URLEncode和URLDecode

 

 

在提交表单时,浏览器会根据请求URL生成相应的请求报文给服务器。在这个过程中,浏览器会将请求地址转换为application/x-www-form-urlencoded MIME编码的字符串先,如下图中在这个编码规范中把utf-8的中文字符“陈”转换成“%E9%99%88”

 

application/x-www-form-urlencoded编码规范是:

1.字符‘a’-‘z’、‘A’-‘Z’、‘0’-‘9’不变

2.特殊字符‘.’、‘-’、‘*’、‘_’不变

3.空字符“ ”转成“+”

4.其他字符都视为不安全,都进行转换,每一个byte根据一些规则转换成%xy形式,其中‘xy’是两个16进制数字表示一个byte。

 

以上面例子来解释。“陈”的unicode码是0x9648,二进制表示就是1001 0110 0100 1000,在utf-8的编码方式中需要3个byte来表示:11101001      10011001     10001000。用十六进制表示这三个byte就是E9、99,88。

 

URLEncode,URLDecode就是实现这个规范的编解码类,在看URLEncode源码时卡了两下,一个是String.charAt(i)返回的“陈”的unicode码,不过想想也是char是两byte的,当然不可能返回三个byte的2进制(String内部就是维护一个char数组)。另一个是char Character.forDigit(int digit,int radix)方法,这个方法参数radix是一个>=2 && <=36的值,radix的表示进制,10就是十进制。digit是一个>0 && <radix的数字。这个方法的作用就是在指定进制下一个数字的表达形式,其中超过9的就用小写字母接上。比如Character.forDigit(11,16)就是返回字符‘b’。

还有就是URLEncode的研发这位Herb Jellinek写代码过程用System.out.println()测试可以理解,不过直接把打印代码直接注释就提交有点丑了吧

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值