计算机只能计算和识别二进制,必须让计算机识别文字,才能和计算机进行交互,彼此也才能通过计算机通信。 由此,有了ASCII编码的诞生,它起始于50年代后期,在1967年定案,是最初美国国家标准,供不同计算机在相互通信时用作共同遵守的西文字符编码标准。
比如 char b=’a’;int c=97; b和c存储时都是1100001 只不过输出类型不一样(类型存储单独占据空间)
需要注意的时候,以上是程序层面上的表示,在文件存储中 “int c = 97” 的 97 是两个字符。我们写的代码文件,IDE右下角有utf-8,这是文件存储层面上的事,如果存储与打开的编码不对就会乱码。
1. 文字编码(ascii、unicode)
为了让计算机能表示文字,计算机有各种编码,有大概发展历程:
ascii => 其它编码(中文(gb2312、GBK)、俄文)=> Unicode(万国码,字符集或编码方案,给每个字符身份)=> utf-8(Unicode的众多具体实现编码方案中的其中一个)
2. 传输编码(base64和uri)
2.1 Base64
因为有些网络传送渠道并不支持所有的字节,例如传统的邮件只支持可见字符的传送,像图片二进制流的每个字节不可能全部是可见字符,所以就传送不了。最好的方法就是在不改变传统协议的情况下,做一种扩展方案来支持二进制文件的传送。把不可打印的字符也能用可打印字符来表示,问题就解决了。
2.2 base64编码原理:
转前:s 1 3
(1)转成ascii码点:对应 115 49 51
(2)拆成2进制: 01110011 00110001 00110011
(3)分组:6个一组(4组) 011100110011000100110011
然后才有后面的 011100 110011 000100 110011
(4)对码点:然后计算机一个字节占8位,不够就自动补两个高位0了
所以有了高位补0
科学计算器输入 00011100 00110011 00000100 00110011
得到 28 51 4 51
转后:c z E z
2.3 uri编码
标准的Base64并不适合直接放在URL里传输,因为URL有一些保留字,后端不便拿取,这时候就需要用到对base64进行处理,已知有两种:
(1)经过安全的base64(请看这篇[前端网络-经过url安全的base64])
(2)uri编码,js可以使用 encodeURIComponent 对参数进行uri编码
2.4 js转bsse64
js的btoa只支持ascii序列字符,对于unicode转base64需要重写或使用插件,请看下方第2链接。
3. 总结
他们是编码方案和具体实现
3. 参考
https://juejin.cn/post/6844903698045370376