url编码和解码分析URLEncoder.encode和URLDecoder.decode
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(); } } }