通过node 中rpc通讯的的buffer来认识ascii码,unicode, 以及utf8编码方式

通过node 中rpc通讯的的buffer来认识ascii码,unicode, 以及utf8编码方式

###rpc
在前端的业务逻辑里主要是客户端和服务端的通讯,主要通过ajax,websocket等方式,而在服务端直接的通讯一般我们认定为rpc通讯

buffer

在rpc通讯的过程中所需要的数据必须是二进制的,buffer其实就是一个二进制的数据流载体,用来存放二进制数据, buffer能够将二进制数据以不同的编码方式进行存储,比如 ascii, utf-8, base64等主流方式,默认是使用utf-8的方式

1
const buffer = new Buffer.form(xxxx, type)

那么utf-8又是什么他们跟unicode 和 ascii码又有什么联系

ascii码

我们到知道,计算机的最原始的编码方式就是 01 这种二进制的方式进行编程的,在使用折中二进制编码方式来表示我们的需要展现的内容文字,每个字节需要8个这样的二进制组成的,由于计算机这种技术是国外发明的,2的8次方也就是256 完全能够将24个字母全部概括了,这就是ascii码的概念

问题来,在计算机发展后,全球不同于语言,如何才能让计算机也能够完全真确的识别更多的字符呢,ascii这种方式就远远不能够实现了,于是unicode就被提出来了

unicode

unicode像是一个大词典,每个unicode字符都对应一个二进制,比如说”帅“的unicode是\u5e05,对应的二进制是101111000000101, 长度是15, 也就是说这个帅子至少需要2个字节组成,但是我们不是很清楚通过两个字节改如何识别,是两个独立的字节表示两个字符,还是两个字节表示一个字符,所以我们需要一个用来规范的编码方式,进行约定识别,这时utf-8 和 utf-16等编码方式就应运而生。

utf-8

就拿utf-8来举例子,这也是我们最常用的一个编码方式,该编码方式是如何进行允运作的呢,我们来看下

1
2
3
4
5
6
7
编码规则如下:
Unicode 十六进制码点范围 UTF-8 二进制
0000 0000 - 0000 007F 0xxxxxxx
0000 0080 - 0000 07FF 110xxxxx 10xxxxxx
0000 0800 - 0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
0001 0000 - 0010 FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

根据上面的规则表我们不难发现,从低到高表示unicode需要几个字符能够表示,而且在通过utf-8编码过后,会形成一个比较规则的格式,为几个字符,头字节头部固定就会有几个1以及一个0, 而后续字符都是以10为开头,让后我们将16进制unicode码转化成2进制从右往左插入到对应的空缺,不足已0填充,就是最后能够通过utf-8识别的 二进制码, 这样通过头字符就知道是后续几个字节表示的是一个字符还是两个。上面刷子是在第三层也即是三个字符组成,填补完为 11100101 10111000 10000101