字符编码笔记:ASCII,Unicode 和 UTF-8

reference

ASCII编码

  • 计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。
  • 一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从00000000到11111111。
  • ASCII 码一共规定了128个字符的编码

非ASCII编码

  • 英语用128个符号编码就够了,但其他语言不一定够。
  • 一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。
  • 简体中文常见编码为 GB2312 。两个字节表示一个汉字

Unicode

  • 多种编码方式,同一个二进制文件被解释为不同的符号。因此,要想打开一个文本文件,必须知道其编码方式。否则会出现乱码。
  • 如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是 Unicode,就像它的名字都表示的,这是一种所有符号的编码。

Unicode的问题

  • Unicode只是一个符号集合。它规定了符号的二进制代码。却没有给出如何存储。
  • 1)出现了 Unicode 的多种存储方式,也就是说有许多种不同的二进制格式,可以用来表示 Unicode。
  • 2)Unicode 在很长一段时间内无法推广,直到互联网的出现。

UTF-8

  • 互联网的普及,强烈要求出现一种统一的编码方式。UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式。

  • UTF-8 最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

  • UTF-8 的编码规则很简单,只有二条:

    • 对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的。
    • 对于n字节的符号(n > 1),第一个字节的前n位都设为1,第n + 1位设为0,后面字节的前两位一律 设为10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码。

    下表总结了编码规则,字母x表示可用编码的位。

    img

阅读更多

扫码向博主提问

桑来93

非学,无以致疑;非问,无以广识
去开通我的Chat快问
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页