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.导出表格、文件等操作,拼装的文件名在报文头中需编码后传入,以免因为自定义的文件名中有特殊字符报错。

代码语言:javascript代码运行次数:0运行复制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();

}

}

}