ASCII 编码, Unicode, UTF8 的关系

ASCII 编码

ASCII 码使用指定的 7 位或 8 位二进制数组合来表示 128 或 256 种可能的字符。标准 ASCII 码也叫基础 ASCII 码,使用 7 位二进制数(剩下的 1 位二进制为 0)来表示所有的大写和小写字母,数字 0 到 9、标点符号, 以及在美式英语中使用的特殊控制字符。其中最后一位用于奇偶校验。

ASCII 是单字节编码,无法用来表示中文(中文编码至少需要2个字节),所以,中国制定了 GB2312 编码,用来把中文编进去。但世界上有许多不同的语言,所以需要一种统一的编码。

Unicode

Unicode 把所有语言都统一到一套编码里,这样就不会再有乱码问题了。

Unicode 最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持 Unicode。

Unicode 和 ASCII 的区别

ASCII 编码是 1 个字节,而 Unicode 编码通常是 2 个字节。

字母 A 用 ASCII 编码是十进制的 65,二进制的 01000001;而在 Unicode 中,只需要在前面补 0,即为:00000000 01000001。

统一成 Unicode 编码,乱码问题从此消失了。但是,如果你写的文本基本上全部是英文的话,用 Unicode 编码比 ASCII 编码需要多一倍的存储空间,在存储和传输上就十分不划算。

UTF8

所以,本着节约的精神,又出现了把 Unicode 编码转化为“可变长编码”的 UTF-8 编码。

UTF-8 编码把一个 Unicode 字符根据不同的数字大小编码成 1-6 个字节,常用的英文字母被编码成 1 个字节,汉字通常是 3 个字节,只有很生僻的字符才会被编码成 4-6 个字节。如果你要传输的文本包含大量英文字符,用 UTF-8 编码就能节省空间。

字符             ASCII                     Unicode                           UTF-8

  A             01000001        00000000 01000001               01000001

中文                x                 01001110 00101101          01001110 00101101

从上面的表格还可以发现,UTF-8 编码有一个额外的好处,就是 ASCII 编码实际上可以被看成是 UTF-8 编码的一部分,所以,大量只支持 ASCII 编码的历史遗留软件可以在 UTF-8 编码下继续工作。

原文链接

你可能感兴趣的:(ASCII 编码, Unicode, UTF8 的关系)