###Base64的来源 Base64的主要用途是将不可打印字符转换成可打印字符,而什么需要这样转换呢?因为有些网络传输渠道并不能支持传输所有字节,一些不可见字符(如控制字符)在传统的邮件系统中就无法传输,而例如图片文件不可能每个字节都是可见字符,这样就导致用途这些渠道的用途受到很大限制。Base64正是解决这一问题,通过64个可见字符来编码各种字符,使得数据在各渠道上得以正常传输。
###Base64的原理 首先,我们看一下Base64的索引表。
可以看到一共有64个字符,包括"A-Z,a-z,0-9,+,/"。在编码过程中,就是通过转换得到的数字索引,对应相应的字符就可以得到Base64编码。 下面以一个例子来看一下具体过程。
文本“Man”在计算机中是以二进制位的形式保存,每个字符文本为8位,而Base64的一个字符只有6位,6位如何表示8位呢?就是取6和8的最小公倍数24,那么就是每3个字符可以通过4个Base64字符来表示,例子中的“Man”就表示为“TWFu”。 每3个字符进行编码,就有可能出现不够3个字符的情况,怎么办?不足3个字符时,在末尾补0凑足6的倍数。另外,Base64的最小单位是4个字符(24位)一组,因此在补0后仍然不足24位的时候,每6位补一个“=”。具体见以下例子。 因此,Base64只可能在末尾出现一个或者两个“=”,中间不可能出现“=”,这一点也可以用来区分多段Base64编码。 ###为什么不是Base32/Base16 Base64编码对应传统字符的字符比是4:3,如果是Base32则字符比是8:5,如果是Base16则字符比是2:1,显然Base64的比例最高,可以以更少的字符转换同样的文本;而如果Base128或者更高,则需要更大编码字符集;所以Base64是在字符集大小与长度比之间取得一个较好的平衡。 ###采用Base64对图片编码 对图片采用Base64编码:
- 不需要额外的请求(Base64编码本质上是一种将二进制数据转成文本数据的方案,因此转换后图片是以文本字符串的形式内嵌在html中)
- 适用于较小且颜色简单的图片(由于Base64会导致字节数增加,因此不要用于大的图片)