Android数据安全之URLEncoder编码

URLEncoder编码

客户端在进行网页请求的时候,网址中可能会包含非ASCII码形式的内容,比如中文、?、&等特殊字符。而直接把这些字符放到网址中请求是不允许的,容易和get请求的转义符冲突,也容易出现丢失或乱码的现象,所以需要用URLEncoder编码地址,将网址中的非ASCII码内容转换成可以传输的字符。

编码原理

1、将需要转换的内容(ASCII码形式之外的内容),用十六进制表示法转换出来,并在之前加上%开头,而ASCII码集内的字符不进行处理。

eg: 0x9c URLEncoder –> %9c

2、内容中的空格‘ ’ ,全部用+代替

3、注:与Hex不同,Hex是将所有的字符转换为16进制表示,而URLEncoder是将ASCII码集之外的转换为%加上相应的16进制。

应用场景

1、所有的GET请求

2、网址中有中文等情况

3、POST请求,所有的Key和Value在提交之前都要经过URLEncoder

代码实现

 @Test
    public void URLEncodeTest() {
        //地址栏不允许中文,传递一些特殊字符 & ? ,而这些符号很容易和get提交上的转义符号冲突
        String url = "http://www.baidu.com?search=\"中文字符\"&name=uy?&cc&pwd=?ke&w";
        //将url进行分割,对相应的字符串进行URLEncode编码,然后再拼接,最后解码
        StringBuffer sb = new StringBuffer("http://www.baidu.com?");

        //通过URLDeCoder转码
        String searchEncode = URLEncoder.encode("search=\"中文字符\"");
        System.out.println("search=\"中文字符\"--编码后: " + searchEncode);
        String nameEncode = URLEncoder.encode("name=uy?&cc");
        System.out.println("name=uy?&cc--编码后: " + nameEncode);
        String pwdEncode = URLEncoder.encode("pwd=?ke&w");
        System.out.println("pwd=?ke&w--编码后: " + pwdEncode);

        //转码后拼接
        String encodeUrl = sb.append(searchEncode).append("&")
                .append(nameEncode).append("&")
                .append(pwdEncode).toString();
        System.out.println("初始的 url=" + url);
        System.out.println("通过URLDeCoder转码 encodeUrl=" + encodeUrl);

        //把转码的url 还原
        String decodeUrl = URLDecoder.decode(encodeUrl);
        System.out.println("通过URLDeCoder解码 decodeUrl=" + decodeUrl);
    }

测试结果:

search="中文字符"--编码后: search%3D%22%E4%B8%AD%E6%96%87%E5%AD%97%E7%AC%A6%22
name=uy?&cc--编码后: name%3Duy%3F%26cc
pwd=?ke&w--编码后: pwd%3D%3Fke%26w
初始的 url=http://www.baidu.com?search="中文字符"&name=uy?&cc&pwd=?ke&w
通过URLDeCoder转码 encodeUrl=http://www.baidu.com?search%3D%22%E4%B8%AD%E6%96%87%E5%AD%97%E7%AC%A6%22&name%3Duy%3F%26cc&pwd%3D%3Fke%26w
通过URLDeCoder解码 decodeUrl=http://www.baidu.com?search="中文字符"&name=uy?&cc&pwd=?ke&w

可以看出ASCII码集内的字符字符并没有编码 而 中文字符进行了编码

追及

下面附上一张ASCII字符码表

附上一张ASCII字符码表

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值