字符集与编码: unicode,utf-8,gb2312等

为使计算机支持更多语言,通常使用 0x80~0xFFFF 范围的 2 个字节来表示 1 个字符。比如:汉字 '中' 在中文操作系统中,使用 [0xD6,0xD0] 这两个字节存储。

不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、GB18030、Big5、Shift_JIS 等各自的编码标准。这些使用多个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码;在繁体中文Windows操作系统中,ANSI编码代表Big5;在日文Windows操作系统中,ANSI 编码代表 Shift_JIS 编码。

世界上存在多种文字,在用计算机处理文字信息时,为了节省存储空间、提高处理速度,一些国家和地区为文字制定了相应的字符集,有的一种文字存在多种字符集。字符集可以以表格的形式描述为字符到单字节或多字节的映射。

各个国家和地区所制定的不同 ANSI 编码标准中,都只规定了各自语言所需的“字符”。比如:汉字标准(GB2312)中没有规定韩国语字符怎样存储。这些 ANSI 编码标准所规定的内容包含两层含义:

  1. 使用哪些字符。也就是说哪些汉字,字母和符号会被收入标准中。所包含“字符”的集合就叫做“字符集”。
  2. 规定每个“字符”分别用一个字节还是多个字节存储,用哪些字节来存储,这个规定就叫做“编码”。

各个国家和地区在制定编码标准的时候,“字符的集合”和“编码”一般都是同时制定的。因此,平常我们所说的“字符集”,比如:GB2312, GBK, JIS 等,除了有“字符的集合”这层含义外,同时也包含了“编码”的含义。

ASCII码字符集是所有多字节字符集的一个子集;GB2312字符集是中国大陆制定的,容纳了6763个简体汉字;Big5字符集是台湾地区制定的,容纳了13053个繁体字;GBK字符集是GB2312的扩展集,字兼容GB2312,容纳二万多个汉字;Unicode字符集设计思想是要它容纳全世界所有文字,作为国际通用的字符集。

“UNICODE 字符集”包含了各种语言中使用到的所有“字符”。用来给 UNICODE 字符集编码的标准有很多种,比如:UTF-8, UTF-7, UTF-16, UnicodeLittle, UnicodeBig 等。

  1. ISO-8859-1: 最简单的编码规则,每一个字节直接作为一个 UNICODE 字符。比如,[0xD6, 0xD0] 这两个字节,通过 iso-8859-1 转化为字符串时,将直接得到 [0x00D6, 0x00D0] 两个 UNICODE 字符,即 "?D"。 反之,将 UNICODE 字符串通过 iso-8859-1 转化为字节串时,只能正常转化 0~255 范围的字符。
  2. GB2312,BIG5,Shift_JIS,ISO-8859-2: 把 UNICODE 字符串通过 ANSI 编码转化为“字节串”时,根据各自编码的规定,一个 UNICODE 字符可能转化成一个字节或多个字节。 反之,将字节串转化成字符串时,也可能多个字节转化成一个字符。比如,[0xD6, 0xD0] 这两个字节,通过 GB2312 转化为字符串时,将得到 [0x4E2D] 一个字符,即 '中' 字。

代码页就是指一个字符集,其中包括数字、标点符号及其它字形。在Windows系统中,不同的语言和Locale设置会调用不同的代码页。例如英语和大多数欧洲语言使用ANSI代码页1252,而中国大陆和新加坡使用的代码页936(GBK字符集),中国台湾地区使用代码页950(Big5字符集)。这个设置在“控制面板”-“区域和语言”选项-“高级选项卡”- Language ofr non-Unicode Programs 设置中。由于Unicode是国际通用的宽字节字符集,所以用Unicode编码的文件不受此处设置的影响,都可以正常的打开。