java - URLEncode - URLDeCode

烂漫一生 提交于 2019-11-30 18:40:32

1.URLEncode - URLDecode 编码加密  这两个类是jdk中封装的类,不需要额外导入jar包

String   para  =   java.net.URLEncoder.encode("乱码",   "utf-8");    -  编码 

String   para1   =   java.net.URLDecoder.decode(para,   "utf-8");   -  解码

para:   %E4%B9%B1%E7%A0%81

para1:  乱码

String  test = new  String(request.getParameter("zhongguo").getBytes("iso8859_1"));     

zhongguo = java.net.URLDecoder.decode(test,"utf-8"); 

 

2.编码中的特殊字符http://blog.sina.com.cn/s/blog_6b2d01f60101763v.html  

URLencode.encode 是'.', '-', '*', '_'符号不编码,而URL传输需要字符串是 "-", ".", "_", "~"不编码。那么可以这样的

String URL="www.baidu.com";

String ENCODING="utf-8";

String strURL= URLEncoder.encode(URL, ENCODING).replace("*","*").replace("~", "~").replace("+"," "); 

3.使用URLDecoder.decode() 方法接收参数时如果参数中含有“%”这个字符,就会抛异常 java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern -,
原因:传参数的时候用encodeURIComponent("是的%试试")%被URL认为是转义的标记,URL规范有自己的规定,%25会被转义成%!你现在的%后面跟了个中文字符,它要转义的时候发现'%试'是它不认识的,就给你报错了!
解决方法:1. 参数用base64转码,接收到后解码一下
Java6自带了jar包的,只要引用下:
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

 /**
  * Base64解密
  * @param key
  * @return
  * @throws Exception
  */
 public static byte[] decoderBase64(String key) throws Exception {
  return (new BASE64Decoder()).decodeBuffer(key);
 }
 /**
  * Base64加密
  * @param key
  * @return
  * @throws Exception
  */
 public static String encoderBase64(byte[] key) throws Exception {
  return (new BASE64Encoder()).encodeBuffer(key);
 }
 
2.使用其他字符替换%
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!