【技术累积】【点】【java】【18】URLEncode

本文深入探讨了URL编码的必要性及工作原理,解释了为何需要对URL中的特定字符进行编码,并通过示例展示了如何使用Java的URLEncoder和URLDecoder进行编码与解码。

基础概念

由于以URL的形式传递信息给服务器时,不允许URL中出现一些特殊字符和空格的,所以需要对URL进行编码处理。

原理是:

  • 将要转码的字符转变为16进制;
  • 从右到左,每两位前面加%

哪些字符是需要转化的呢?

  1. ASCII 的控制字符。
    这些字符都是不可打印的,自然需要进行转化。

  2. 一些非ASCII字符。
    这些字符自然是非法的字符范围。转化也是理所当然的了。

  3. 一些保留字符。
    很明显最常见的就是“&”了,这个如果出现在url中了,那你认为是url中的一个字符呢,还是特殊的参数分割用的呢?

  4. 就是一些不安全的字符了。
    例如:空格。为了防止引起歧义,需要被转化为“+”。

举例

@Test
    public void testUrlEncode() throws UnsupportedEncodingException {
        String encode = URLEncoder.encode("你好","GBK");
        String encodeUtf8 = URLEncoder.encode("你好","UTF-8");

        String decode = URLDecoder.decode(encodeUtf8,"GBK");
        String decodeUtf8 = URLDecoder.decode(encode,"UTF-8");
        LOGGER.info("encode={}",encode);
    }

814386-20181008152648275-1888921543.png

其中,编解码可以看做是一个字节是一位,例如几种常见编码所述。

参考文章

转载于:https://www.cnblogs.com/andy1202go/p/9754746.html

Java 中,可以使用 `java.net.URLEncoder` 类来进行 URL 编码。`URLEncoder` 类提供了 `encode` 方法用于将字符串进行 URL 编码。以下是一个简单的示例代码: ```java import java.io.UnsupportedEncodingException; import java.net.URLEncoder; public class UrlEncodeExample { public static String urlEncode(String input) { try { return URLEncoder.encode(input, "UTF-8"); } catch (UnsupportedEncodingException e) { // 若编码格式不支持则抛出异常 e.printStackTrace(); return null; } } public static void main(String[] args) { String originalString = "hello world! 你好,世界!"; String encodedString = urlEncode(originalString); System.out.println("Original String: " + originalString); System.out.println("Encoded String: " + encodedString); } } ``` 在上述代码中,`urlEncode` 方法接受一个字符串参数,使用 UTF - 8 编码格式对其进行编码,如果编码格式不支持则抛出 `UnsupportedEncodingException` 异常 [^1]。 `URLEncoder.encode` 方法的通用编码逻辑是遍历输入字符串的每个 Unicode 码,若为安全字符则原样追加;空格根据 `spaceAsPlus` 决定输出 `+` 还是 `%20`;否则按 UTF - 8 编码后对每个字节以 `%HH` 形式输出 [^2]。 需要注意的是,`encodeURI` 函数采用 UTF - 8 对 URL 进行编码,如果服务器在进行解码时使用的是其他的编码方式就会出现乱码。默认的服务器配置的解码字符集都不是 UTF - 8,所以大部分情况下地址栏提交中文查询参数时会产生乱码。针对这种情况,可以连续使用两次 `encodeURI` 在客户端(主要指浏览器)对非英文字符进行编码,然后在服务端使用 `java.net.URLDecoder.decode(String, "UTF-8")` 解码,即可得到正确的中文 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值