1340.640.jpg

平时总被各种编码弄的晕乎乎的,今天看了大半天文章,总算有所得,下面来总结一下各种编码的概念以及在前端中的应用

1.ascii码

编码通常指一种在人和机器之间进行信息转化的系统

人们在互相沟通时使用了很多不同的编码,应为在不同的应用场合,其中一些较其他更为简便

我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有01两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000011111111

上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为 ASCII 码,一直沿用至今,ASCII 码一共规定了128个字符的编码,比如空格SPACE是32(二进制00100000),大写的字母A是65(二进制01000001)。

2.GBK

ascii码对于美国人来说是足够了,但是中国人却是用不了,因为中国人使用的是汉字而不是英文,汉字多达10万左右,所以GBK就是中国的编码方式,用多个字节去编码汉字

2.乱码和utf-8

如果每个国家的编码方式都不同,你用你的方式将信息编码,我用我的方式去解码,得到的信息还能是原来的信息吗?这样就会产生乱码

为了杜绝这种情况,需要有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是 Unicode,就像它的名字都表示的,这是一种所有符号的编码。

Unicode是一种字符集,规定了每个字符的编码,但是你具体怎么实现它不管

utf-8是Unicode 的实现方式之一。也是在互联网上使用最广的一种 Unicode 的实现方式

3.base64

utf-8已经是统一后的标准了,为什么又会蹦出个base64呢

有些协议只支持 ascii 字符传递,有些老机器,协议对不可见字符,二进制的理解不一样,为了避免撞车,需要有一个兼容性高的标准
万幸,Base64使用的64个字符,经ASCII/UTF-8编码后在大多数机器,软件上的行为是一样的。

base64 截取6位二进制码,用8位去表示,所以体积会增大1/3

应用:
对于前端来说的话,如果一些小图片做成base64嵌入到Html中,就不用再发请求了,优化了性能
对于一些纯文本协议,可以用base64来传输图片

4.encodeURI,encodeURIComponent

说实话,这两个方法我平时基本也没使用过,看了一些文章是这么说的
url里面的query 如果有类似username = 'a&foo=boo'这种,由于服务器根据&和=来识别query的key和value,就会产生歧义。
所以 a&foo=boo不会被当成一个整体,所以我们需要用encodeURI去转义
encodeURIComponent转义范围更大,包括':','/','?'
所以如果在query参数里有‘&’ 可以用encodeURI,如果参数里有完整的url,可以用encodeURIComponent


Runningfyy
1.3k 声望661 粉丝