安全与编码知识点总结

本文深入探讨了Base64编码的原理及其在二进制数据到纯文本转换中的应用,同时解析了Unicode字符集与UTF-8编码规则的区别与联系,详细解释了字符从码位到字节序列的转换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BASE64编码

Base64编码可以把任意长度的二进制数据变为纯文本。它的原理是把3字节的二进制数据按6bit一组,用4个int整数表示,然后查表,把int整数用索引对应到字符,得到编码后的字符串

Base64.getEncoder().encode();
	        public byte[] encode(byte[] src) {
	            int len = outLength(src.length);          // dst array size
	            byte[] dst = new byte[len];
	            int ret = encode0(src, 0, src.length, dst);
	            if (ret != dst.length)
	                 return Arrays.copyOf(dst, ret);
	            return dst;
	        }

为什么这个方法返回是个二进制数组呢?不应是输出字符吗?这个二进制数组正是这些输出字符的ASCII码,BASE64编码程序里, encodeToString里面也是调用encode()得到byte[],再转为字符串。

Unicode

Unicode 是「字符集」
UTF-8 是「编码规则」

字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point)
编码规则:将「码位」转换为字节序列的规则(编码/解码 可以理解为 加密/解密 的过程)

广义的 Unicode 是一个标准,定义了一个字符集以及一系列的编码规则,即 Unicode 字符集和 UTF-8、UTF-16、UTF-32 等等编码……

Unicode 字符集为每一个字符分配一个码位,例如「知」的码位是 30693,记作 U+77E5(30693 的十六进制为 0x77E5)。

UTF-8 顾名思义,是一套以 8 位为一个编码单位的可变长编码。会将一个码位编码为 1 到 4 个字节:

在这里插入图片描述

根据上表中的编码规则,之前的「知」字的码位 U+77E5 属于第三行的范围:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值