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%22name=uy?&cc--编码后: name%3Duy%3F%26ccpwd=?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字符码表

更多相关文章

  1. Android客户端与服务器端的json数据交互(很详细)
  2. ilbc编解码在android实现
  3. [Android]分析 Sax解析Rss xml文件时,遇到的not well-formed错误
  4. Android(安卓)NDK的C/C++代码中利用JNI回调实现字符编码转换
  5. Android/Java 实现PCM与G.711编码互转
  6. Android自动解析html带图片,实现图文混排
  7. Android(安卓)百度地图—反地理编码—获取当前位置附近的大厦楼
  8. Android直播实现(一)Android端推流、播放
  9. Android(安卓)利用Java实现压缩与解压缩(zip、gzip)支持中文路径

随机推荐

  1. Android(安卓)Linux usb gadget configfs
  2. android DatePicker
  3. android 图片背景使用这种方式很爽
  4. Android(安卓)SDK r16 发布
  5. Android旋转动画不停顿
  6. Android(安卓)自制一个工作日历 原代码
  7. Android之qq盗号
  8. Android(安卓)热修复案例
  9. Android(安卓)= Java ?
  10. Android版本和API Level对应关系