简述 · 如何理解base64编码

base64,就是将字节序列编写为可打印的ascii字符,关键就集中在“可打印”三个字上。

计算机中数据存储使用二进制来表示,为了便于阅读,就需要指明哪些二进制数据代表哪个符号,于是ascii由此诞生。

但是ascii包含不可见的字符,在某些情况下可能被当做控制字符处理,从而传输错误。

还有一些场景需要纯文本传输,比如在http协议中使用json传输数据,如果需要提交文本参数和图片,将图片转化为ascii显然是有问题的,而base64则可以很好地处理,再比如http响应时,也可以使用base64将文件等二进制数据同字符数据一次返回。

所以说base64的特点就在于可移植性高。

假如你现在使用的是MySQL5.5.3之前的版本,意味着不支持utf8mb4字符集,倘若需要存储的文本中包含emoji表情,其中的一种方式就是使用base64编码再存储。

base64的字符集由0-9,a-z,A-Z,+,/,组成,=做末尾填充,编码过程就是使用4字节的base64字符表示3字节的ascii字符,很容易理解,base64有64个字符,共使用6bit表示,ascii有256个字符,共使用8bit来表示,两者的最小公倍数是24,就是4字节的base64字符或者3字节的ascii字符。

ascii

简述 · 如何理解base64编码_第1张图片

base64

简述 · 如何理解base64编码_第2张图片

转换过程如下,假设现在有个字符串“ab”,ascii表示即‭01100001‬01100010,拆成6bit的base64有3段,‬011000,01‬0110,001000,即“YWI”,由于不满4个字符,需要补一个=,最终是“YWI=”。

有兴趣的话可以在程序中自行验证。

 

--------------------------------

公众号:以镒称铢

出自<孙子兵法 · 军形>,故胜兵若以镒称铢,败兵若以铢称镒。胜者之战民也,若决积水于千仞之溪者,形也。

长按下图二维码关注,你将发现一个不一样的世界,君子引而不发,跃如也~

你可能感兴趣的:(简述 · 如何理解base64编码)