一、基本信息
1、一种编码方式。
2、使用场景:
(1)某些老的路由器不支持 UTF-8,当中文字符的二进制流到路由器中时,路由器可能按照自己支持的编码方式,例如:ascii 码来解读,可能解析出不可见字符,例如:回车、tab。容易导致路由器异常从而传输失败。
(2)避免在 http 中传输二进制数据,因为不同的设备对二进制解读是不同的。同样,一些老的软件、网络协议也有类似的问题。
(3)网页请求中,若网页中存在图片,一般浏览器的操作是获取到基本的网页数据之后,再次进行请求获取里面图片的数据,这样就导致了网络请求频繁。为了解决这个问题,可以将网页中图片的二进制数据转成 Base 64 ,嵌入到 html 中,一次即可传至浏览器。
总之,Base64 编码可以将所有的二进制串转成可见的字符串,并且都落在 ascii 码表中可见字符中,几乎所有的系统都是支持 ascii 码的,故使用 Base 64 编码可以通过几乎所有的设备的传输。Base 64 相当于一个万能语言,各个生物(设备)都能看懂。
二、编码表
Base64 编码是通过 64 个字符来表示二进制数据,64 个字符表示二进制数据只能表示 6 位,所以他可以通过 4 个 Base64 的字符来表示 3 个字节,如下是 Base64 的字符编码表。
码值 | 字符 | 码值 | 字符 | 码值 | 字符 | 码值 | 字符 |
---|---|---|---|---|---|---|---|
0 | A | 16 | Q | 32 | g | 48 | w |
1 | B | 17 | R | 33 | h | 49 | x |
2 | C | 18 | S | 34 | i | 50 | y |
3 | D | 19 | T | 35 | j | 51 | z |
4 | E | 20 | U | 36 | k | 52 | 0 |
5 | F | 21 | V | 37 | i | 53 | 1 |
6 | G | 22 | W | 38 | m | 54 | 2 |
7 | H | 23 | X | 39 | n | 55 | 3 |
8 | I | 24 | Y | 40 | o | 56 | 4 |
9 | J | 25 | Z | 41 | p | 57 | 5 |
10 | K | 26 | a | 42 | q | 58 | 6 |
11 | L | 27 | b | 43 | r | 59 | 7 |
12 | M | 28 | c | 44 | s | 60 | 8 |
13 | N | 29 | d | 45 | t | 61 | 9 |
14 | O | 30 | e | 46 | u | 62 | + |
15 | P | 31 | f | 47 | v | 63 | / |
三、编码过程
如要表示字符串“China” ,先将各个字符转换为二进制形式,也就是 01000011 01101000 01101001 01101110 01100001,先将字符串分成 2 组,每组 3 个字节,如下所示:
01000011 01101000 01101001 01101110 01100001 (1)
第一组蓝色以 6 bit 为单位从左向右进行分割,每小组 6 bit,左侧补充 2 个0,使之为一个字节,结果如下:
00010000 00110110 00100001 00101001
经过计算,该组的十进制值为 16.54.33.41,依照索引可以得出对应的 Base64 字符,为 Q.2.h.p。
同理可以得到第二组的分割结果为:
00011011 00100110 00000100
由于第三个小组本身不足 6 bit,故在小组右侧补充 2 个 0。经过计算,该组的十进制值为 27.38,依照索引可以得出对应的 Base64 字符,为 b.m.E。
由于上述(1)号串,第二组应该为 3 个字节,结果只有两个,故需要在 base 64 编码最后添加 1 个 =,缺几个字节就加几个 = ,由于每组最多 3 个字节,故顶过有 2 个 = 。
四、解码过程
解码过程就是把 4 个字节还原成 3 个字节再根据“=”数量不同最终还原出二进制。
(SAW:Game Over!)