url編碼和解碼分析
1.Get請求會將引數做預設的url解碼操作,介面接收到的值是Get解碼後的值。
2.可以將Get操作修改成Post操作,這樣不會url解碼。可以在介面中做url解碼。
3.在多次傳遞引數的過程中,無需反覆的編碼(或者加了空格,加了換行),否則會將整個字串錯亂了。 (/ %2F %252F) (+ %2B %252B)
生產中可能遇到到場景:
1.支付寶支付時傳值(自定義引數內容 passback_params 需要encode編碼後傳輸,回撥介面中收到後需要decode解碼)
2.GET方法中傳參有特殊字元等內容,需要編碼後傳值。
3.有些web容器會預設將引數編碼後傳值,收到引數後需要解碼。
4.匯出表格、檔案等操作,拼裝的檔名在報文頭中需編碼後傳入,以免因為自定義的檔名中有特殊字元報錯。
package com.example.core.mydemo.des; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; import java.util.Date; /** * output: * -------------特殊符號編碼------------- * + >>>%2B * / >>>%2F * 空格 >>>+ * 換行 >>>%0A * = >>>%3D * %2B >>>%252B * %2F >>>%252F * %252B >>>%25252B * %252F >>>%25252F * -------------特殊符號解碼------------- * + >>> * / >>>/ * 空格 >>> * 換行 >>> * * %3D >>>= * %2B >>>+ * %2F >>>/ * %252B >>>%2B * %252F >>>%2F * 你好 * %E4%BD%A0%E5%A5%BD */ public class EncodeTest { public static void main(String[] args) { System.out.println("-------------特殊符號編碼-------------"); System.out.println("+ >>>" + URLEncoder.encode("+")); System.out.println("/ >>>" + URLEncoder.encode("/")); System.out.println("空格 >>>" + URLEncoder.encode(" ")); System.out.println("換行 >>>" + URLEncoder.encode("\n")); System.out.println("= >>>" + URLEncoder.encode("=")); System.out.println("%2B >>>" + URLEncoder.encode("%2B")); System.out.println("%2F >>>" + URLEncoder.encode("%2F")); System.out.println("%252B >>>" + URLEncoder.encode("%252B")); System.out.println("%252F >>>" + URLEncoder.encode("%252F")); System.out.println("-------------特殊符號解碼-------------"); System.out.println("+ >>>" + URLDecoder.decode("+")); System.out.println("/ >>>" + URLDecoder.decode("/")); System.out.println("空格 >>>" + URLDecoder.decode(" ")); System.out.println("換行 >>>" + URLDecoder.decode("%0A")); System.out.println("%3D >>>" + URLDecoder.decode("=")); System.out.println("%2B >>>" + URLDecoder.decode("%2B")); System.out.println("%2F >>>" + URLDecoder.decode("%2F")); System.out.println("%252B >>>" + URLDecoder.decode("%252B")); System.out.println("%252F >>>" + URLDecoder.decode("%252F")); try { // 將application/x-www-from-urlencoded字串轉換成普通字串 String keyWord = URLDecoder.decode("%E4%BD%A0%E5%A5%BD", "utf-8"); System.out.println(keyWord); //輸出你好 // 將普通字元創轉換成application/x-www-from-urlencoded字串 String urlString = URLEncoder.encode("你好", "utf-8"); //輸出%E4%BD%A0%E5%A5%BD System.out.println(urlString); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }