参考的YouTube链接:
https://www.youtube.com/watch?v=sqPTR_v4qFA
UTF-8是什么?
- 用来对任何语言的文本进行编码 编码至2进制数字
2.是对unicode进行可变长度编码的编码规则
3.它使用1到4个8位的字节对unicode码点进行编码
为什么我们要使用Unicode?
在unicode之前,许多的我们可能用的是ASCII字符集进行编码,ASCII是七位的编码,覆盖从0到127的值。ASCII主要是对罗马字母和拉丁字母进行编码,因此它 主要适用于对英文进行编码。
对于其他语言,使用127个字符是远远不够的,比如中文。因而许多国家发明了他们自己的字符集进行编码,因此同样的2进制码会同时对应着不同的字符。 这就造成了传输的不便,比如我们要浏览一个韩国的网站,网站上都是韩文,如果使用我们本国的专有字符集进行编码,则会造成数据错乱。
因此,unicode被发展起来了,以对所有的语言进行编码。
每一个全世界存在的字符都可以在unicode当中找到对应的码点
那什么是UTF-8呢,它是如何进行编码的呢?
OK,重申一变,utf-8是一种可变长度的编码方式8-bit Unicode Transformation Format
1个字节的编码只适用于第0个到第127个的字符。
1个字节的utf-8编码其实是和ASCII一样的
2个字节的编码是关于第128到第2047的字符
3个字节的编码是第2048到第65535的字符
4个字节的编码是关于第65536到第112064的字符
我们先来了解一下十六机制以及二进制
十六进制(简写为hex或下标16)在数学中是一种逢16进1的进位制。一般用数字0到9和字母A到F(或af)表示,其中:AF表示10~15,这些称作十六进制数字。
https://baike.baidu.com/item/%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6/4162457?fr=aladdin
二进制的百度解释:
https://baike.baidu.com/item/%E4%BA%8C%E8%BF%9B%E5%88%B6/361457?fr=aladdin
一个16进制的数等于一个4位的2进制数
如下图所示:
0 1 1 1 1 1 1 1
7 F
十六进制下的7F等同于十进制下的127
![](https://img.haomeiwen.com/i8182728/cb04ed7be864e9bf.jpg)
1.在utf-8当中,高位的比特(也就是最左边的那个比特啦)是十分重要的。
2.第一个字节的前面的几个比特阐述了将会有多少个字节将会编码成字符
在1个字节的编码(0-127个值)当中,最高位比特永远是0。
也就是说,所有的单字节编码都会有以下这样的形式。只有剩下的7位是用来编码
![](https://img.haomeiwen.com/i8182728/b618c87e333c6a51.jpg)
在两个字节的编码当中,第一个字节的前三个比特是110,第二个字节的前两个比特是10
剩下的5+6个比特位来进行编码成值
![](https://img.haomeiwen.com/i8182728/2890bf5e03dbab34.jpg)
第一个字节的前四个比特为‘1110’ 其余字节的前两个比特位‘10’ 。 4+6+6 16个有效比特位
![](https://img.haomeiwen.com/i8182728/8ca0fe133a6efe82.jpg)
四个字节的编码也遵循着同样的规则,第一个字节的前五个比特位‘11110’(表明这是要对四个字节进行编码)其余剩下的三个字节当中的前两个比特都是‘10’,一共给了3+6+6+6 21个比特位用来编码。
![](https://img.haomeiwen.com/i8182728/4db2b927aab11f76.jpg)
实战
1FACBD(16进制数)是一个unicode值
这个数字是大于FFFF(65535),因此它需要用4个字节来进行编码
![](https://img.haomeiwen.com/i8182728/0cc988f78380ca93.jpg)
因为这是一个四个字节的编码,所以我们使用如下这样的形式
![](https://img.haomeiwen.com/i8182728/1fe34b75cf97d92b.jpg)
只要将1FACBD的二进制码直接从左到右填充到空白的比特位里就好。
![](https://img.haomeiwen.com/i8182728/4254b70d28990127.jpg)
网友评论