url编码和解码分析
1.Get请求会将参数做默认的url解码操作,接口接收到的值是Get解码后的值。 2.可以将Get操作修改成Post操作,这样不会url解码。可以在接口中做url解码。 3.在多次传递参数的过程中,无需反复的编码(或者加了空格,加了换行),否则会将整个字符串错乱了。 (/ / %2F) ( + %2B)
生产中可能遇到到场景: 1.支付宝支付时传值(自定义参数内容 passback_params 需要encode编码后传输,回调接口中收到后需要decode解码) 2.GET方法中传参有特殊字符等内容,需要编码后传值。 3.有些web容器会默认将参数编码后传值,收到参数后需要解码。 4.导出表格、文件等操作,拼装的文件名在报文头中需编码后传入,以免因为自定义的文件名中有特殊字符报错。
代码语言:javascript复制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
* %2B >>>%252B
* %2F >>>%252F
* -------------特殊符号解码-------------
* >>>
* / >>>/
* 空格 >>>
* 换行 >>>
*
* = >>>=
* + >>>
* / >>>/
* %2B >>>+
* %2F >>>/
* 你好
* 你好
*/
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("+ >>>" URLEncoder.encode("+"));
System.out.println("/ >>>" URLEncoder.encode("/"));
System.out.println("%2B >>>" URLEncoder.encode("%2B"));
System.out.println("%2F >>>" URLEncoder.encode("%2F"));
System.out.println("-------------特殊符号解码-------------");
System.out.println(" >>>" URLDecoder.decode(" "));
System.out.println("/ >>>" URLDecoder.decode("/"));
System.out.println("空格 >>>" URLDecoder.decode(" "));
System.out.println("换行 >>>" URLDecoder.decode("
"));
System.out.println("= >>>" URLDecoder.decode("="));
System.out.println("+ >>>" URLDecoder.decode("+"));
System.out.println("/ >>>" URLDecoder.decode("/"));
System.out.println("%2B >>>" URLDecoder.decode("%2B"));
System.out.println("%2F >>>" URLDecoder.decode("%2F"));
try {
// 将application/x-www-from-urlencoded字符串转换成普通字符串
String keyWord = URLDecoder.decode("你好", "utf-8");
System.out.println(keyWord); //输出你好
// 将普通字符创转换成application/x-www-from-urlencoded字符串
String urlString = URLEncoder.encode("你好", "utf-8"); //输出你好
System.out.println(urlString);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}