Java-URLDecoder、URLEncoder使用及说明

 更新时间:2024年12月10日 15:51:08   作者:Java杨永杰  
本文介绍了Java中URLDecoder和URLEncoder类的使用方法,包括编码和解码规则、推荐的编码方案、解码器处理非法字符的方法以及URL编码和解码的示例

前言

  • Java中的URLDecoder和URLEncoder是用于对URL进行编码和解码的类。
  • URL编码是将URL中的特殊字符转换成特定的格式,以便于在URL中传递参数。URLDecoder类提供了decode()方法,可以将经过URL编码的字符串解码成原始字符串。
  • URLEncoder类提供了encode()方法,可以将字符串编码成URL编码的格式。

规则

URLEncoder

在对字符串进行编码时,下列规则适用:

  • 字母数字字符“a”通过“z”、“A”通过“Z”和“0”通过“9”保持不变。
  • 特殊字符.”、“-”、“*”、和“_”保持不变。
  • 空间性” ”转变为一个加号“+”。

所有其他字符都是不安全的,并首先被转换成一个或多个字节,使用一些编码方案。然后每个字节表示的字符串“% XY”,xy是两位十六进制表示的字节。推荐使用UTF-8编码方案。然而,对于兼容性的原因,如果没有指定的编码,则使用该平台的默认编码。

例如使用UTF-8编码格式的字符串的字符串ü@ foo bar”会转化为“+字符串+ % % % C3前40foo吧”因为在UTF-8字符编码为字节ü两C3(HEX)和BC(HEX),和字符编码为一个@字节40(HEX)。

URLDecoder

转换过程是由urlencoder班采用反向。这是假设在编码的字符串的所有字符都是下列之一:“a”通过“z”、“A”通过“Z”、“0”通过“9”、和“-”、“_”、“.”、和“*”。字符“%”是允许的但被解释为一种特殊的序列开始逃跑。

下面的规则应用在转换中:

  • 字母数字字符“a”通过“z”、“A”通过“Z”和“0”通过“9”保持不变。
  • 特殊字符.”、“-”、“*”、和“_”保持不变。
  • 加号“+”转换为空格字符“ ”。
  • 一个序列的形式“XY”将被视为代表一个字节xy是两位十六进制表示的8位。然后,包含一个或多个这些字节序列连续将由字符替换所有子串(S)的编码会导致那些连续字节。用于对这些字符进行解码的编码方案可以被指定,或者如果未指定,则该平台的默认编码将被使用。

有两种可能的方法,该解码器可以处理非法字符串。它可以把非法字符单独或可能引发IllegalArgumentException。该方法的解码器需要的执行。

方法

URLEncoder

Modifier and TypeMethod and Description
static Stringencode(String s)过时的。

由此产生的字符串可能会有所不同,这取决于该平台的默认编码。相反,使用编码(字符串,字符串)方法来指定编码。

static Stringencode(String s, String enc)

翻译成 application/x-www-form-urlencoded格式字符串使用一个特定的编码方案。

URLDecoder

Modifier and TypeMethod and Description
static Stringdecode(String s)过时的。

由此产生的字符串可能会有所不同,这取决于该平台的默认编码。相反,使用解码(字符串,字符串)方法来指定编码。

static Stringdecode(String s, String enc)

解码使用特定的编码方案 application/x-www-form-urlencoded字符串。

使用

以下是URLDecoder和URLEncoder的使用示例:

URL编码示例:

String url = "https://www.example.com/?name=John Doe";
String encodedUrl = URLEncoder.encode(url, "UTF-8");
System.out.println(encodedUrl);

输出结果:

https%3A%2F%2Fwww.example.com%2F%3Fname%3DJohn+Doe

URL解码示例:

String encodedUrl = "https%3A%2F%2Fwww.example.com%2F%3Fname%3DJohn+Doe";
String decodedUrl = URLDecoder.decode(encodedUrl, "UTF-8");
System.out.println(decodedUrl);

输出结果:

https://www.example.com/?name=John Doe

在使用URLDecoder和URLEncoder时,需要传入charset参数指定字符编码。

常用的字符编码包括"UTF-8"、"ISO-8859-1"等。编码和解码时需要使用相同的字符编码,否则可能会出现乱码问题。

案例

在实际使用中,URLDecoder和URLEncoder主要用于处理URL中的特殊字符和参数的编码。

以下是一些使用URLDecoder和URLEncoder的常见场景和示例:

1.编码URL参数

在向URL中添加参数时,需要对参数进行编码,以确保特殊字符不会破坏URL的结构。例如:

String param1 = "John Doe";
String param2 = "Hello, world!";
String encodedParam1 = URLEncoder.encode(param1, "UTF-8");
String encodedParam2 = URLEncoder.encode(param2, "UTF-8");

String url = "https://www.example.com/?name=" + encodedParam1 + "&message=" + encodedParam2;
System.out.println(url);

输出结果:

https://www.example.com/?name=John+Doe&message=Hello%2C+world%21

2.解码URL参数

在接收到URL参数后,需要对参数进行解码,以获取原始的参数值。例如:

String encodedParam = "Hello%2C+world%21";
String decodedParam = URLDecoder.decode(encodedParam, "UTF-8");
System.out.println(decodedParam);

输出结果:

Hello, world!

3.解析URL

当需要解析URL中的各个部分时,URLDecoder和URLEncoder也可以派上用场。

例如,解析URL中的查询参数:

String url = "https://www.example.com/?name=John+Doe&age=30";
URL parsedUrl = new URL(url);
String query = parsedUrl.getQuery(); // 获取查询参数部分
String[] params = query.split("&"); // 拆分参数
for (String param : params) {
    String[] keyValue = param.split("="); // 拆分键值对
    String key = URLDecoder.decode(keyValue[0], "UTF-8");
    String value = URLDecoder.decode(keyValue[1], "UTF-8");
    System.out.println("Key: " + key + ", Value: " + value);
}

输出结果:

Key: name, Value: John Doe
Key: age, Value: 30

注意:

在真实的应用中,需要注意处理异常、选择合适的字符编码和适当地进行参数校验和处理。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java使用JasperReport高效生成Word文档指南

    Java使用JasperReport高效生成Word文档指南

    在当今数据驱动的商业环境中,企业每天都需要处理大量动态文档生成需求,本文主要为大家介绍了如何使用JasperReport高效生成Word文档,感兴趣的小伙伴可以了解下
    2025-07-07
  • java懒惰评估实现方法

    java懒惰评估实现方法

    这篇文章主要介绍了java懒惰评估如何实现的相关内容及实例,有兴趣的朋友们可以学习参考下。
    2021-05-05
  • 应用Java泛型和反射导出CSV文件的方法

    应用Java泛型和反射导出CSV文件的方法

    这篇文章主要介绍了应用Java泛型和反射导出CSV文件的方法,通过一个自定义函数结合泛型与反射的应用实现导出CSV文件的功能,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-12-12
  • Java实现分页的几种方法详细解析

    Java实现分页的几种方法详细解析

    这篇文章主要介绍了Java实现分页的几种方法详细解析,在Java中想实现分页功能有几种常用的方法,今天我们就来详细解析一下,文中提供了解决思路和部分实现代码,需要的朋友可以参考下
    2023-11-11
  • Java日常练习题,每天进步一点点(5)

    Java日常练习题,每天进步一点点(5)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • Java实现马踏棋盘算法

    Java实现马踏棋盘算法

    这篇文章主要为大家详细介绍了Java实现马踏棋盘算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Springboot居然可以设置动态的Banner(推荐)

    Springboot居然可以设置动态的Banner(推荐)

    这篇文章主要介绍了Springboot居然可以设置动态的Banner,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • springboot多环境配置方案(不用5分钟)

    springboot多环境配置方案(不用5分钟)

    这篇文章主要介绍了springboot多环境配置方案(不用5分钟),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 利用Java实现Word文档自动编号提取的方法详解

    利用Java实现Word文档自动编号提取的方法详解

    文章介绍如何用Java从Word试卷中提取自动编号,通过创建NumberingContext类识别中文、阿拉伯数字及字母等不同编号格式,并实现getParagraphNumbering方法完成结构化转换,解决了传统方法无法解析编号的问题,感兴趣的小伙伴可以参考阅读下
    2025-09-09
  • springboot调用C#封装的DLL文件中函数的实现那

    springboot调用C#封装的DLL文件中函数的实现那

    本文主要介绍了在Spring Boot中集成C# DLL,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-07-07

最新评论