ASCII、Unicode、utf-8、base64有什么关联


计算机只能计算和识别二进制,必须让计算机识别文字,才能和计算机进行交互,彼此也才能通过计算机通信。 由此,有了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

https://juejin.cn/post/6989391487200919566#comment

这个讲的不错


文章作者: iamfugui
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 iamfugui !
评论
  目录