Java编码与解码

news2024/12/24 0:08:50

首先区分加密与编码并不是一回事,

本节主要讲述常见的三种编解码方式,分别为:Unicode、URL、Base64。

  1. 常见编码算法:

    • Unicode编码:每一字符都可变成以 \u 开头,长度为6的字符串。
    • URL编码:以百分号%开头,全大写。由于中文在utf-8中大多数以3字节(即24比特位)表示,所以每个汉字都会变成以百分号%开头、紧接着2位16进制数,一共三份、总长度为9的字符串。
    • Base64编码:把二进制数据变成文本格式,这样在很多文本中就可以处理二进制数据。例如要在电子邮件中添加一个二进制文件,就可以使用Base64编码,然后以文本的形式传送;或者将其他加密方式产生的二进制密文转化为十六进制的字符串密文。它会把原始数据的长度【约】增加1/3,但其他编码算法并不一定比其更优。
  2. Java常见解码思路:

    • 首先获取被编码的字符流,即byte[]。因为byte是二进制数0/1,相当于获取了最原始的二进制数据,1字节等于8位二进制数bit,范围从-128 ~ 127。
    • 利用String等方式尝试不同的字符集,解码。

    【本质】:用对应的“字符集”来解二进制码。

    // 指定了一种编码方式
    byte[] bytes   = "中文".getBytes("GBK");
    
    // 用相对应的 “字符集” 方式来解码
    String msg = new String(bytes, "GBK");
    
  3. Unicode编解码

    • 需编写固定逻辑,较麻烦,直接使用hutool框架即可。
    // Unicode编码
    String en = UnicodeUtil.toUnicode("中国");
    
    // Unicode解码,\u4e2d\u6587
    String msg="\\u4e2d\\u6587";
    String s = UnicodeUtil.toString(en);
    
  4. URL编解码(Java原生)

    • URLEncoder
    • URLDecoder
    // URL编码
    String en = URLEncoder.encode("中文", StandardCharsets.UTF_8);
    String en = URLEncoder.encode("中文", "utf-8");
    
    // URL解码
    String de = URLDecoder.decode("%E4%B8%AD%E6%96%87", "utf-8");
    
  5. Base64编解码

    • 原理解释:原先是8位一字节,即8位二进制数可以表示一字符;现在我们令6位表示一字符,所以如果原来是【Man】,则会被翻译为【TWFu】,即虽然底层的数据量没变(还是24位),但是所表示的数据长度增加了1/3(由 size = 3 变为 size = 4 )。

      image-20220809211351667

      (3个字节相当于24个比特,对应于4个Base64单元)

    • 另外,如果要编码的字节数不能被3整除,最后会多出1个或2个字节,那么可以使用下面的方法进行处理:先使用0字节值在末尾补足,使其能够被3整除,然后再进行Base64的编码。【然后】因为被补足的地方会用等于号=作后缀(此时为补足号=而不是6个0代表的索引“A”,这点要分清),所以我们才能经常看到编码的末尾出现等号。

      image-20220809212022315

      (8与16不能被3整除,24才能被3整除)

      image-20220809212528981

      (总共65字符 = 64个字符 + 补足符=

    • Java原生

    // Base64编码
    Base64.getEncoder().encodeToString("中国".getBytes());
    
    // Base64解码
    byte[] bytes = Base64.getDecoder().decode(a);
    String decode   = new String(bytes);
    
    • hutool框架:本质还是源于Java原生的方式,只是作了层简易“封装”,如无必要不建议导入使用。
    String encode = Base64.encode("中国");
    
    String decode = Base64.decodeStr(encode);
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/30907.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java并发编程--多线程间的同步控制和通信

使用多线程并发处理,目的是为了让程序更充分地利用CPU ,好能加快程序的处理速度和用户体验。如果每个线程各自处理的部分互不相干,那真是极好的,我们在程序主线程要做的同步控制最多也就是等待几个工作线程的执行完毕,…

JS表达式完全攻略

在语法概念中,运算符属于词,表达式属于短语。表达式由一个或多个运算符、操作数组成的运算式。表达式的功能是执行计算,并返回一个值。 表达式的形式 表达式是一个比较富有弹性的运算单元。简单的表达式就是一个直接量、常量或变量。例如&a…

【优化调度】粒子群算法求解水火电调度优化问题【含Matlab源码 1181期】

⛄一、粒子群算法简介 1 引言 自然界中的鸟群和鱼群的群体行为一直是科学家的研究兴趣所在。生物学家Craig Reynolds在1987年提出了一个非常有影响的鸟群聚集模型,在他的仿真中,每一个个体都遵循:避免与邻域个体相撞:匹配邻域个体…

Java面向对象之——封装

文章目录前言一、封装的概念二、何为封装?三、封装拓展——包🍑1、包的概念🍑2、导入包中的类🍑3、自定义包🍑4、常见的包四、访问限定符🍑1、public修饰符🍑2、private修饰符🍑3、默…

软件产品确认测试包括哪些方面

1.技术方面 确认测试又称有效性测试,是在模拟的环境下,运用黑盒测试的方法,验证被测软件是否满足需求规格说明书列出的需求。 确认测试的目的是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模…

Docker 下 jitsi-meet 视频服务器 安装部署

一、参考网站 官网文档地址:Self-Hosting Guide - Docker | Jitsi Meet 二、Docker 版本 三、安装部署 3.1、下载并解压缩安装包 地址:Release stable-8044: release jitsi/docker-jitsi-meet GitHub CSDN地址:docker-jitsi-meet-stab…

visdom安装及使用

目录1. 安装visdom的流程2. 使用流程1. 安装visdom的流程 重点参考链接:visdom安装出现Downloading scripts, this may take a little while然后就不动了 先去到github直接下载了visdom的压缩包:https://github.com/fossasia/visdom然后将visdom-maste…

第七章 数学 6 AcWing 1593. 整数分解

第七章 数学 6 AcWing 1593. 整数分解 原题链接 AcWing 1593. 整数分解 算法标签 数学 数论 DP 背包问题 思路 类似AcWing 12. 背包问题求具体方案 把n看成背包的容积N 因为n最多不超过400,然而p进制最少为2 所以物品的价值最大可以取到20(因为20^2 400) 所以…

Python读取CSV文件,数值精度丢失

Excel保存为csv以后,大数值的列,会把转换为科学计数法,而且后边几位都会被转为0. 搞了很多方法,最后直接安装 openpyxl 组件 和 pandas, 读取Excel文件就行了。 data pd.read_excel("C:/work/20221111AI/cleaned_data_noTi…

第二章 计算机算术

数据表示决定了计算机所执行操作的类型,数据从一个位置传到另一个位置的方法, 以及对存储元件的特性要求。浮点运算是非常重要的,因为它的实现决定了计算机执行复杂图形变换和图像处理的速度, 而且浮点运算对计算的准确度也有很重…

高通平台开发系列讲解(mm-camera篇)MM-CAMERA框架

文章目录 一、Camera软件位置1.1、开源代码1.2、专有源码二、摄像头前端(Camera Frontend)2.1、整体框架2.2、 Camera HAL与mm-camera交互沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要介绍高通平台mm-camera代码框架。 一、Camera软件位置 QTI 针对 An…

Flink 状态编程

状态编程有状态算子状态的管理状态的分类按键分区状态(Keyed State)支持的结构类型代码实现状态生存时间(TTL)算子状态(Operator State)基本概念和特点状态类型代码实现广播状态(Broadcast Stat…

DFP 数据转发协议应用实例 .与其它厂商 LoRA 设备匹配

DFP 数据转发协议应用实例 5.与其它厂商 LoRA 设备匹配 DFP 是什么? 稳控科技编写的一套数据转发规则, 取自“自由转发协议 FFP(Free Forward Protocol)” ,或者 DFP(DoubleF Protocol)&#xf…

【优化求解】粒子群算法求解仓库成本控制优化问题【含Matlab源码 1577期】

⛄一、粒子群算法简介 1 引言 自然界中的鸟群和鱼群的群体行为一直是科学家的研究兴趣所在。生物学家Craig Reynolds在1987年提出了一个非常有影响的鸟群聚集模型,在他的仿真中,每一个个体都遵循:避免与邻域个体相撞:匹配邻域个体…

基于JAVA的网上图书商城参考【数据库设计、源码、开题报告】

数据库脚本下载地址: https://download.csdn.net/download/itrjxxs_com/86427643 主要使用技术 Struts2HibernateJSPCSSJSMysql 功能介绍 系统有五类用户,分别是:会员用户,商品管理员,订单管理员,会员管…

【MSSQL】SQL SERVER导入中文乱码问题解决

公司最近承接了一个项目,甲方现使用旧版SiteServer框架(以下简称“SiteCMS”)作为门户网站,使用的数据源是SQL Server。 现在需要对SiteCMS进行升级,在升级时数据库和数据库结构也需要同时更新,其中数据库…

硬件顶配、数字先行,路特斯重塑「智能座舱」

诚然,在车联网的高度普及、5G技术的铺开以及汽车产业融合的大势下,传统单一驾驶与乘坐功能的汽车座舱正在被颠覆,更高级、更智能的“智能座舱”应运而生。 从行业发展态势来看,大屏多屏已经是智能汽车的基本操作,智能…

【网络安全】——逻辑漏洞之短信轰炸漏洞

作者名:Demo不是emo 主页面链接:主页传送门创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷座右…

程序的环境

文章目录[TOC](文章目录)前言一、程序环境分类二、翻译环境1.总体流程2.编译2.1预编译2.2编译2.3汇编3.链接三、运行环境总结前言 我们平时在编译器上编写代码,然后运行代码,最后得到程序的运行结果。这让我们不经好奇:程序在电脑中到底经过…

Java常用设计模式

前言 设计模式是对大家实际工作中写的各种代码进行高层次抽象的总结,其中最出名的当属 Gang of Four (GoF)的分类了,他们将设计模式分类为 23 种经典的模式,根据用途我们又可以分为三大类,分别为创建型模式、结构型模式和行为型模…