关于java的URLEncoder

 

最近在一个小接口请求建立公告的时候,遇到个小问题,含有特殊字符好比空格、换行等字符上传过去,会致使可能接口连接异常,咱们的后端会频繁说失败,后来认真想了下,能不能对公告的内容进行编码,让后端可以识别,最后才想到URLEncoder类能够对其进行编码,而后后端进行URLDecoder进行解码就能够了。html

接着:后端

1、为何要用URLEncoder编码

客户端在进行网页请求的时候,网址中可能会包含非ASCII码形式的内容,好比中文。code

而直接把中文放到网址中请求是不容许的,因此须要用URLEncoder编码地址,htm

将网址中的非ASCII码内容转换成能够传输的字符blog

不会被编码的内容接口

1.大写字母A-Zio

2.小写字母a-z原理

3.数字 0-9coding

4.标点符 - _ . ! ~ * ' (和 ,)

2、编码原理

一、将须要转换的内容(ASCII码形式以外的内容),用十六进制表示法转换出来,并在以前加上%开头

eg:  0x9c  URLEncoder --> %9c

二、内容中的空格‘ ’ ,所有用+代替

三、注:与Hex不一样,Hex是将全部的字符转换为16进制表示,而URLEncoder是将ASCII码集以外的转换为%加上相应的16进制,而ASCII码集内的字符不进行处理

3、应用场景

一、全部的GET请求

二、网址中有中文等状况

三、POST请求,全部的Key和Value在提交以前都要通过URLEncoder

4、示例

复制代码

try {
    String a = URLEncoder.encode("a", "UTF-8");
    Log.i("encode","a 进行URLEncoder编码后-->"+a );
    String b = URLEncoder.encode("a中", "UTF-8");
    Log.i("encode","a中 进行URLEncoder编码后-->"+b );

    String decode = nURLDecoder.decode("a%E4%B8%AD", "UTF-8");
    Log.i("encode","a%E4%B8%AD 进行URLDecoder解码后-->"+decode);
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}

复制代码

运行结果:

10-17 07:33:14.357 1012-1012/com.xqx.encrypsthow I/encode﹕ a 进行URLEncoder编码后-->a
10-17 07:33:14.367 1012-1012/com.xqx.encrypsthow I/encode﹕ a中 进行URLEncoder编码后-->a%E4%B8%AD
10-17 07:33:14.377 1012-1012/com.xqx.encrypsthow I/encode﹕ a%E4%B8%AD 进行URLDecoder解码后-->a中

能够看出 字符'a' 并无编码  而 中文 '中' 进行了编码

与URLEncoder编码对应的是URLDecoder解码 

能够看出 "a中"--编码-->"a%E4%B8%AD"--解码-->"a中"

部份内容转自:http://www.cnblogs.com/xqxacm/p/4888062.html

相关文章
相关标签/搜索