Contents
  1. 1. 适用场景
  2. 2. Base64索引表
  3. 3. 示例
  4. 4. 在URL中的应用
  5. 5. 总结
  6. 6. 参考

Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方为64,所以每6个位(bit)为一个单元,对应某个可打印字符。3个字节有24个位,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。编码后的数据比原始数据略长,为原来的 1.33倍。Base64是一种可逆的编码方式,从编码的方式即可逆推出解码的方式。

适用场景

Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。

Base64索引表

十进制对应表0-63。
Base64索引表

示例

  1. 编码 ‘Man’

Man编码示例

  1. 如果要编码的字节数不能被3整除,最后会多出1个或2个字节,那么可以使用下面的方法进行处理:先使用0字节值在末尾补足,使其能够被3整除,然后再进行Base64的编码。在编码后的Base64文本后加上一个或两个=号,代表补足的字节数。也就是说,当最后剩余两个八位字节(2个byte)时,最后一个6位的Base64字节块有四位是0值,最后附加上两个等号;如果最后剩余一个八位字节(1个byte)时,最后一个6位的base字节块有两位是0值,最后附加一个等号。 参考下表:

Base64编码补齐示例

  1. 汉字’严’

汉字”严”如何转化成Base64编码?

这里需要注意,汉字本身可以有多种编码,比如gb2312、utf-8、gbk等等,每一种编码的Base64对应值都不一样。下面的例子以utf-8为例。

首先,”严”的utf-8编码为E4B8A5,写成二进制就是三字节的”11100100 10111000 10100101”。将这个24位的二进制字符串,按照第3节中的规则,转换成四组一共32位的二进制值”00111001 00001011 00100010 00100101”,相应的十进制数为57、11、34、37,它们对应的Base64值就为5、L、i、l。

所以,汉字”严”(utf-8编码)的Base64值就是5Lil。

在URL中的应用

标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的/和+字符变为形如%XX的形式。

为解决此问题,可采用一种用于URL的改进Base64编码,它不在末尾填充=号,并将标准Base64中的+和/分别改成了-和_,称为”url safe”的base64编码,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。

总结

Base64是一种任意二进制到文本字符串的编码方法,常用于在URL、Cookie、网页中传输少量二进制数据。

参考

Contents
  1. 1. 适用场景
  2. 2. Base64索引表
  3. 3. 示例
  4. 4. 在URL中的应用
  5. 5. 总结
  6. 6. 参考