關於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

相關文章
相關標籤/搜索