url編碼和解碼分析URLEncoder.encode和URLDecoder.decode

oktokeep發表於2024-04-21

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();
        }

    }
}

相關文章