编码理解

计算机中有各种各样的编码,其实编码就是种语言,因为计算机只懂0和1,那么为了让计算机

明白我们给它发出的指令,就需要将我们的语言转换成计算机能读懂的语言,这时候,我们通过人为的规定一种0和1的排列组合顺序为某一种符号或者语言,这就是编码。是一种人为的规定的一种映射集合。

我首先接触的是ascii码,它由7位比特位组成(实际是八位,但第一位默认为0),2^^7等于128,也就是它可以表示128种字符,其中有可以显示的字符和32个不显示的控制字符。

还有一个ANSI码,它采用了完整的8比特位,即第一位可以是1,也可以是0,所以它可以表示256种字符。

但世界上的国家这么多语言也就有很多种,像我们汉字字的个数就有几万字,所以需要一个能表示更多字符的编码。。

我们中国是自己有个GBK编码还有GB2312编码(GBK在后者上扩展了一些),这是中国自己制定的编码。

可以在浏览器网页页面右键,编码就可以看见下面这个图了,可见编码之多。

但这么多编码就又有问题了,如果我们查看使用其它编码进行编码的网页,就会出现乱码,那么就需要一个更大的标准的编码来容纳这些国家的各种乱七八糟的符号。

这就是unicode编码了,但它却有些问题。Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

也就是存储方式不确定,例如一个a(ascii码为97),可以用0110 0001,也可以用0000 0000 0110 0001来存储,这就造成了可以以不同方式表示一个符号。而计算机如何知道这个字符是用什么方式存储的呢,如果规定了每个字符都用3个字节去存储,那么像英文字符它前面的2个字节位必定都要用全0来填充,这就造成了极大的浪费。·

于是UTF-8编码出现了,有点要强调的是:utf-8只是unicode的一种实现方式

utf-8的特性就是,它是一种可变长的编码方式
文字解释就不多说,就是如下面示例,有些部分是确定数值,而根据这些数值就知道这个字符是几个字节的,从哪开始,从哪结束。

0xxxxxxx
110xxxxx 10xxxxxx
1110xxxx 10xxxxxx 10xxxxxx
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
我们学安全的,肯定得提些安全问题。
utf-8编码,和gbk编码都存在漏洞 具体百度,或者看这篇文章 点击这里
原文地址:https://www.cnblogs.com/GH-D/p/8343998.html