在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态(-128~127),这被称为一个字节(byte)。
也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111
字符集与字符编码
字符集:定义了文字和二进制的对应关系,为字符分配了唯一的编号,常见的 ASCII字符集,GB2312字符集,Unicode字符集
字符编码:规定了如何将文字的编号存储到内存中,本质就是如何使用二进制字节来表示字符
有的字符集在制定时就考虑到了编码的问题,是和编码结合在一起的;有的字符集只管制定字符的编号,至于怎么编码,是其他人的事情
base编码
ASCII 是用128(2^8)个字符,对二进制数据进行编码的方式,
base64 编码是用64(2^6)个字符,对二进制数据进行编码的方式
base32 编码就是用32(2^5)个字符,对二进制数据进行编码的方式
base16 编码就是用16(2^4)个字符,对二进制数据进行编码的方式
- base64加密:在email传输中,加密是肯定的,但是base64加密的目的不是让用户发送非常安全的Email。这种加密方式主要就是“防君子不防小人”,达到一种一眼看上去看不出内容的效果。
- base64编码是用来解决把不可打印的内容塞进可打印内容的需求的。比如把图片存到数据库,图片数据归根到底还是一堆二进制串(总不能把这些二进制串直接存到数据库吧),用base64编码后的显示成的字符串就大大缩小的长度,可以存到数据库。
- 满足电子邮件中不能直接使用非ASCII码字符传输数据的规定,所以使用base64进行编码后传输,因为base64的64个字符肯定有对应的ascii编码。
UniCode是一个字符集
Javascript程序是使用Unicode字符集,Javascript源码文本通常是基于UTF-8编码。
但JS代码中的字符串类型是UTF-16编码的,这也是为什么会碰到api接口返回字符串在前端出现乱码,因为多数后台服务都使用utf-8编码,前后编码方式不一致。
说起字符集的发展历程,可以总结为一句话:几乎都是对ASCII字符集的扩展。
可以使用的编码有三种,分别是:
UFT-8:一种变长的编码方案,使用 1~6 个字节来存储;
UFT-32:一种固定长度的编码方案,不管字符编号大小,始终使用 4 个字节来存储;
UTF-16:介于 UTF-8 和 UTF-32 之间,使用 2 个或者 4 个字节来存储,长度既固定又可变。
UTF 是 Unicode Transformation Format 的缩写,意思是“Unicode转换格式”,后面的数字表明至少使用多少个比特位(Bit)来存储字符。
标签:编码,UTF,字符,二进制,前端,base64,字符集 From: https://www.cnblogs.com/tingying/p/17507869.html