1.ASCLL
众所周知,电脑是在美国发展起来的。而电脑内部的所有数据都是二进制。所以美国人在使用电脑输入信息的时,他们设立了一张表,这张表上有数字、大小写英文字符、各种键盘符号等等。一共是128个。
这张表被称作 ASCLL
即 American Standard Code for Information Interchange
(美国信息交换标准代码)。
在美国人的日常使用,这 128
个字符已经能够满足需要。
但随着互联网的发展,越来越多的国家/地区步入互联网的时代。这样他们也需要计算机能够标记他们的文字和语言等等,但显然 ASCLL
字符集不能满足需要。
于是这些国家/地区根据自己的需求制定了自己的字符集,譬如中国大陆制定了 GBK
,而台湾地区则制定了 Big5
。
2.GBK与Big5
看起来,每个国家/地区制定自己的字符集,似乎已经满足了各自的需求。
但这种形式的一个弊端就是乱码问题。
因为同一个编码在不同的字符集下对应的字符是不同的。
我们常见的乱码神兽“锟斤拷”就是字符集的解析不同所导致的。
譬如中国大陆发送一封邮件到台湾,台湾地区打开时就会出现乱码,除非台湾打开时指定字符集为 GBK
。
3.Unicode
Unicode
将编码空间分成 17
个平面,以 0
到 16
编号。
第 0
平面(或者说基本多文种平面)中的码点,都可以用一个 UTF-16
单位来编码,或者以 UTF-8
来编码的话,会使用一、二或三个字节。而第 1
到 16
平面(或称辅助平面)中的码点,UTF-16
会以代理对的方式来使用,而 UTF-8
则会编码成 4
个字节。
在每个平面中,会先将相关的字符集结为区段的形式。虽然区段可以是任意大小,但会以 16
个码点的倍数,且通常是 128
个码点的倍数。而一份文稿中使用到的区段,可能会散布在多个区段中。