计算机编码知识,ASCII编码,GBK,Unicode,UTF-8编码详细介绍

Unicode字符集,将全世界的文字存储到计算机

1. 编码的作用

文字或者数据存储在计算机内是二进制的方式。
但是同样一个文字或者字符 存储的二进制数值是多少,就能编码有关。

比如 甲 把 字符 A 存在电脑里 是 001
但是 乙把 字符 A 存在电脑里 是 011

这样就带来一个问题,同样是 字符A,每个人都按照自己的心情来决定 对应的二进制编码。

1. 方便和统一管理

所以为了方便和统一管理,这个时候就有一套规范,大家都遵守,比如这套规范定义 字符A 是以 111 存放在电脑里,而且是唯一的一个编号。

2. 常用的编码方式

1. ASCII编码,英文存储到计算机里面

ASCII编码表
在这里插入图片描述

上面的表格摘抄了一部分的 ASCII 编码。
例如 字母 D 大家都在电脑里 存储为 68, 而反过来,如果使用 ASCII 编码,发现68,也意味着这是 字母 D

2. GB2312编码和GBK编码,将中文存储到计算机

上面的ASCII 只是解决了英文怎么存储的问题,但是中文 怎么存储到计算机里面去的,也需要一套规范。

这个时候,就出现了 GBK2312, GBK, GBK18030编码。
在这里插入图片描述
比如汉字 的 他的 GBK编码就是 D6D0, 同样 在计算机当中如果发现 D6D0, 且使用的是 GBK编码,则会转换成汉字
在这里插入图片描述

3. Unicode字符集,将全世界的文字存储到计算机

各个国家的编码方式都有自己国家的标准,一旦出了国,就需要各种转换,这个感觉有点像中国人说中文,英国人说英语一样,有没有可能大家都说同一门语言呢?

编码也是一样的,为什么不能有一套标准规范,大家都遵守呢?

就在这种呼吁下,Unicode 诞生了。Unicode 也称为统一码、万国码;看名字就知道,Unicode 希望统一所有国家的字符编码。

例如上面 的汉字 的 Unicode 编码 是 4E2D
在这里插入图片描述

3. UTF-8 和 Unicode 的关系

这里UTF-8 和 Unicode 经常会被搞混, Unicode相当于是一套规范,规定每一个 字符汉字,对应的 编码是多少。
严格来说,字符集和字符编码不是一个概念:

  • 字符集定义了字符和二进制的对应关系,为每个字符分配了唯一的编号。可以将字符集理解成一个很大的表格,它列出了所有字符和二进制的对应关系,计算机显示文字或者存储文字,就是一个查表的过程。
  • 而字符编码规定了如何将字符的编号存储到计算机中。如果使用了类似 GB2312 和 GBK 的变长存储方案(不同的字符占用的字节数不一样),那么为了区分一个字符到底使用了几个字节,就不能将字符的编号直接存储到计算机中,字符编号在存储之前必须要经过转换,在读取时还要再逆向转换一次,这套转换方案就叫做字符编码

例如 汉字 的 Unicode 编码 是 4E2D
但是 问题是 4E2D 怎么存储到 计算机里面,它的 二进制是 0100 1110 0010 1101, UTF-8 就是一套方案, 在计算机里面怎么存储 这个二进制?

1. utf-8编码

  1. UTF-8
    UTF-8 的编码规则很简单:
  • 如果只有一个字节,那么最高的比特位为 0,这样可以兼容 ASCII;
  • 如果有多个字节,那么第一个字节从最高位开始,连续有几个比特位的值为 1,就使用几个字节编码,剩下的字节均以 10 开头。

具体的表现形式为:

  • 0xxxxxxx:单字节编码形式,这和 ASCII 编码完全一样,因此 UTF-8 是兼容 ASCII 的;
  • 110xxxxx 10xxxxxx:双字节编码形式(第一个字节有两个连续的 1);
  • 1110xxxx 10xxxxxx 10xxxxxx:三字节编码形式(第一个字节有三个连续的 1);
  • 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx:四字节编码形式(第一个字节有四个连续的 1)。

xxx 就用来存储 Unicode 中的字符编号。

例如 汉字 的 Unicode 编码 是 4E2D
二进制是 0100 1110 0010 1101, 则使用 utf-8 编码的话,16进制 是 e4 b8 ad
在计算机里存储的是 1110 0100 1011 1000 1010 1101, 也就是 需要三个字节存储
0100 11 1000 10 1101 刚好是 Unicode 的编码

下面是一些字符的 UTF-8 编码实例(绿色部分表示本来的 Unicode 编号):
在这里插入图片描述

4. 计算机里面怎么使用编码

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件
在这里插入图片描述

浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器:
在这里插入图片描述
所以你看到很多网页的源码上会有类似<meta charset="UTF-8" />的信息,表示该网页正是用的UTF-8编码。

猜你喜欢

转载自blog.csdn.net/sgy1993/article/details/114929342