java - URLEncode - URLDeCode

本文详细介绍了URL编码和解码的过程,包括特殊字符处理、异常情况解决及编码替换方法,旨在帮助开发者理解并正确处理URL参数。

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.使用其他字符替换%
### Java中如何对URL进行URL编码处理 在Java中,对URL进行URL编码处理可以使用`URLEncoder`类,它提供了对字符串进行URL编码的功能。该类属于`java.net`包,常用于将字符串转换为`application/x-www-form-urlencoded`格式,适用于GET请求的查询参数或POST请求的表单数据。 对字符串进行URL编码时,建议指定字符集以确保编码一致性,推荐使用`StandardCharsets.UTF_8`作为编码标准。例如: ```java import java.net.URLEncoder; import java.nio.charset.StandardCharsets; public class UrlEncodeExample { public static void main(String[] args) { String url = "https://example.com/search?q=测试&lang=zh"; String encodedUrl = URLEncoder.encode(url, StandardCharsets.UTF_8); System.out.println(encodedUrl); } } ``` 上述代码中,原始URL包含中文字符和特殊符号,使用`URLEncoder.encode()`方法后,输出结果为: ``` https%3A%2F%2Fexample.com%2Fsearch%3Fq%3D%E6%B5%8B%E8%AF%95%26lang%3Dzh ``` 该编码结果确保了URL中的特殊字符(如`:`、`/`、`?`、`=`、`&`)和非ASCII字符(如中文字符)被正确转换,以便在HTTP请求中安全传输[^1]。 需要注意的是,`URLEncoder.encode()`会将空格转换为`+`符号,而不是`%20`。如果希望保持空格为`%20`,可以使用`String.replace("+", "%20")`进行替换: ```java String encodedWithSpace = URLEncoder.encode("hello world", StandardCharsets.UTF_8).replace("+", "%20"); ``` 此外,Java中还可以使用`URI`类来构建完整的URL对象,它会自动处理部分编码问题,但不适用于对整个URL字符串进行编码。例如: ```java import java.net.URI; import java.net.URISyntaxException; public class UriExample { public static void main(String[] args) throws URISyntaxException { URI uri = new URI("https", "example.com", "/search", "q=测试&lang=zh", null); System.out.println(uri.toASCIIString()); } } ``` 输出结果为: ``` https://example.com/search?q=%E6%B5%8B%E8%AF%95&lang=zh ``` 该方式适用于构建结构化的URL,但不适用于对已有完整URL字符串进行编码。 在接收端解码URL编码的字符串时,可使用`URLDecoder.decode()`方法,同样建议指定字符集为`UTF-8`以确保正确还原原始字符串: ```java import java.net.URLDecoder; public class UrlDecodeExample { public static void main(String[] args) { String encoded = "https%3A%2F%2Fexample.com%2Fsearch%3Fq%3D%E6%B5%8B%E8%AF%95%26lang%3Dzh"; String decoded = URLDecoder.decode(encoded, StandardCharsets.UTF_8); System.out.println(decoded); } } ``` 输出结果为: ``` https://example.com/search?q=测试&lang=zh ``` 综上所述,Java中对URL进行URL编码处理的主要方式是使用`URLEncoder.encode()`方法,并配合字符集指定以确保编码一致性。对于接收端,使用`URLDecoder.decode()`进行解码操作。在构建结构化URL时,也可以使用`URI`类实现更安全的URL处理[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值