ASCII编码,将英文存储到计算机

  ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是一套基于拉丁字母的字符编码,共收录了 128 个字符,比如大写字母A的编码是65,小写字母z的编码是122(ASCII码对照表自行百度),用一个字节就可以存储,它等同于国际标准 ISO/IEC 646。
  ASCII 规范于 1967 年第一次发布,最后一次更新是在 1986 年,它包含了 33 个控制字符(具有某些特殊功能但是无法显示的字符)和 95 个可显示字符。

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

  要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。你可以想得到的是,全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准,就会不可避免地出现冲突。
  ASCII、GB2312、GBK、Shift_Jis、ISO/IEC 8859 等地区编码都是各个国家为了自己的语言文化开发的,不具有通用性,在一种编码下开发的软件或者编写的文档,拿到另一种编码下就会失效,必须提前使用程序转码,非常麻烦。因此Unicode应运而生,Unicode也称为统一码、万国码;看名字就知道,Unicode希望统一所有国家的字符编码。Unicode 于 1994 年正式公布第一个版本,现在的规模可以容纳 100 多万个符号,是一个很大的集合。

  有兴趣的可以转到 https://unicode-table.com/cn 查看 Unicode 包含的所有字符,以及各个国家的字符是如何分布的

Unicode 字符集是如何存储的

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

有的字符集在制定时就考虑到了编码的问题,是和编码结合在一起的,例如 ASCII、GB2312、GBK、BIG5 等,所以无论称作字符集还是字符编码都无所谓,也不好区分两者的概念。而有的字符集只管制定字符的编号,至于怎么存储,那是字符编码的事情,Unicode 就是一个典型的例子,它只是定义了全球文字的唯一编号,我们还需要 UTF-8、UTF-16、UTF-32 这几种编码方案将 Unicode 存储到计算机中。

Unicode 可以使用的编码方案有三种,分别是:
  1.UTF-8:一种变长的编码方案,使用 1~6 个字节来存储;
  2.UTF-16:一种固定长度的编码方案,不管字符编号大小,始终使用 4 个字节来存储;
  3.UTF-32:介于 UTF-8 和 UTF-32 之间,使用 2 个或者 4 个字节来存储,长度既固定又可变。


UTF

UTF 是 Unicode Transformation Format 的缩写,意思是"Unicode转换格式",后面的数字表明至少使用多少个比特位(Bit)来存储字符。

UTF-8:
  如果只有一个字节,那么最高的比特位为 0,这样可以兼容 ASCII;
  如果有多个字节,那么第一个字节从最高位开始,连续有几个比特位的值为 1,就使用几个字节编码,剩下的字节均以 10 开头;
  UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。

UTF-16:
  UFT-16使用 2 个或者 4 个字节来存储。

UTF-32:
  UTF-32 是固定长度的编码,始终占用 4 个字节,足以容纳所有的 Unicode 字符,所以直接存储 Unicode 编号即可,不需要任何编码转换。浪费了空间,提高了效率。

标签:无

你的评论