Java之URLEncoder、URLDecoder、Base64编码与解码方式

 更新时间:2024年05月15日 14:41:49   作者:alwaysonline1204  
这篇文章主要介绍了Java之URLEncoder、URLDecoder、Base64编码与解码方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

URLEncoder、URLDecoder、Base64编码与解码

1. URL

主要用来http get请求url不能传输中文参数问题。

http请求是不接受中文参数的

1.1 URLEncoder编码

使用指定的编码机制将字符串转换为 application/x-www-form-urlencoded 格式

对String编码时,使用以下规则:

  • 字母数字字符 “a” 到 “z”、“A” 到 “Z” 和 “0” 到 “9” 保持不变。
  • 特殊字符 “.”、"-"、"*" 和 "_"保持不变。
  • 空格字符 " " 转换为一个加号 “+”。
  • 所有其他字符都是不安全的,因此首先使用一些编码机制将它们转换为一个或多个字节。然后每个字节用一个包含 3 个字符的字符串 "%xy"表示,其中 xy 为该字节的两位十六进制表示形式。推荐的编码机制是 UTF-8。

1.2 URLDecoder解码

使用指定的编码机制对 application/x-www-form-urlencoded 字符串解码。

1.3 举例

    public static void main(String[] args) throws UnsupportedEncodingException {
        String str = "编码测试+-./&=a=1*%123";
        String charset = "utf-8";
        System.out.println("urlEncoder编码数据: " + str);
        String encode = URLEncoder.encode(str, charset);
        System.out.println("编码结果: " + encode);
        String decode = URLDecoder.decode(encode, charset);
        System.out.println("解码结果: " + decode);
    }

urlEncoder编码数据: 编码测试+-./&=a=1*%123
编码结果: %E7%BC%96%E7%A0%81%E6%B5%8B%E8%AF%95%2B-.%2F%26%3Da%3D1*%25123
解码结果: 编码测试+-./&=a=1*%123

2. Base64

在网络中传输数据都是使用ascii方式传输。对于一些图片、视频等数据,可能就会被编码成ascii中不可见部分的编码。

网络中不同的路由设备处理方式不同,有可能就会把这部分数据弄丢了。

为了保证数据传输的正确性,可以使用Base64编码将这些不可见数据编码成可见数据。

由于某些系统中只能使用ASCII字符。Base64就是用来将非ASCII字符的数据转换成ASCII字符的一种方法

2.1 Base64编码

Base64.getEncoder().encode(str.getBytes())

2.2 Base64解码

Base64.getDecoder().decode(encode)

2.3 举例

    public static void main(String[] args) throws UnsupportedEncodingException {
        String str = "编码测试+-./&=a=1*%123";
        String charset = "utf-8";
        System.out.println("base64编码数据: " + str);
        String encode = new String(Base64.getEncoder().encode(str.getBytes()));
        System.out.println("编码结果: " + encode);
        String decode = new String(Base64.getDecoder().decode(encode));
        System.out.println("解码结果: " + decode);
    }

base64编码数据: 编码测试+-./&=a=1*%123
编码结果: 57yW56CB5rWL6K+VKy0uLyY9YT0xKiUxMjM=
解码结果: 编码测试+-./&=a=1*%123

Java项目中遇到URLEncoder URLDecoder编码解码问题

做项目遇到的问题

就是获取cookie中的用户Id

1.我的用户id是用base64Encode加码

如下:

2.构建需要返回给客户端的用户对象

3.base64Encode解码失败,获取不到用户ID,为空

4.原因是前端传过来的用户ID有什么的字符号不能识别,所以需要转码

5.这时候就要用到URLDecoder.decode编码解码

userIdString = URLDecoder.decode (userIdString, "UTF-8");

转码成功了,拿到值了

URLEncoder URLDecoder作用解释

  • URLDecoder类包含一个decode(String s,String enc)静态方法,它可以将application/x-www-form-urlencoded MIME字符串转成普通字符串;
  • URLEncoder类包含一个encode(String s,String enc)静态方法,它可以将普通字符串转换成application/x-www-form-urlencoded MIME字符串。

总结

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

相关文章

  • Java效率提升神器jOOR

    Java效率提升神器jOOR

    这篇文章主要介绍了Java效率提升神器jOOR,jOOR是一个第三方库,通过链式DSL接口,简化了反射过程,更多相关内容组要的朋友可以参考一下
    2022-07-07
  • java中逻辑控制举例具体讲解

    java中逻辑控制举例具体讲解

    Java程序逻辑控制通俗说就是对代码执行顺序的控制,这篇文章主要给大家介绍了关于java中逻辑控制的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • java快速解析路径中的参数(&与=拼接的参数)

    java快速解析路径中的参数(&与=拼接的参数)

    这篇文章主要介绍了java快速解析路径中的参数(&与=拼接的参数),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-02-02
  • SpringBoot将logback替换成log4j2的操作步骤

    SpringBoot将logback替换成log4j2的操作步骤

    文章介绍了如何在SpringBoot项目中将默认的日志框架logback替换为log4j2,以利用log4j2的高性能异步日志记录特性,特别是通过Disruptor实现的无锁化队列,提高了日志处理速度,同时,文章提供了详细的配置步骤,需要的朋友可以参考下
    2024-10-10
  • Java8 String内存优化之字符串常量池详解

    Java8 String内存优化之字符串常量池详解

    这篇文章主要介绍了Java8 String内存优化之字符串常量池,具有很好的参考价值,希望对大家有所帮助,
    2023-07-07
  • Java效率提升神器之Guava-Joiner

    Java效率提升神器之Guava-Joiner

    这篇文章主要介绍了Java效率提升神器之Guava-Joiner,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-07-07
  • java实现在原有日期时间上加几个月或几天

    java实现在原有日期时间上加几个月或几天

    这篇文章主要介绍了java实现在原有日期时间上加几个月或几天,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • 快速搭建springboot项目(新手入门)

    快速搭建springboot项目(新手入门)

    本文主要介绍了快速搭建springboot项目(新手入门),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • SpringBoot使用AOP记录接口操作日志的方法

    SpringBoot使用AOP记录接口操作日志的方法

    日志记录量是很大的,所以只记录关键地方并按期归档,最好是存在如elasticsearch中,如果存在数据库中,分表是不错的选择,这篇文章主要介绍了SpringBoot使用AOP记录接口操作日志的方法,需要的朋友可以参考下
    2022-08-08
  • java8 多个list对象用lambda求差集操作

    java8 多个list对象用lambda求差集操作

    这篇文章主要介绍了java8 多个list对象用lambda求差集操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09

最新评论