编码
一.Unicode 编码
Unicode 并不只是一个编程工具,它还是一个政治的、经济的工具。没有结合世界的
语言支持的应用程序通常只能被那些能读写 ASCII 所支持语言的个人使用。这使得建立在
ASCII 基础之上的计算机技术脱离了世界上大部分人。Unicode 允许程序使用世界上任何
一种字符集,因此它支持所有语言。
Unicode 让程序员为普通人提供用他们本国语言就能使用的软件。这样就不用再学一
门外语了,而且更容易实现计算机技术社会和财政上的利益。很容易设想,如果用户必须
为使用因特网浏览器而学习乌尔都语的话,您就难以看到计算机在美国的使用。Web 就
更不会出现了。
所有现代字符集的基础都是在 1968 年以 ANSIX3.4 版本出版的美国信息交换标准
码(American Standard Code for Information Interchange,ASCII)。一个值得注
意的例外是在 ASCII 之前定义的 IBM 的扩充的二进制编码的十进制交换码(Extended
Binary Coded Decimal Information Code,EBCDIC)。ASCII 是一个编码字符集
(coded character set,CCS),换句话说,它是整数到字符表示的映射。ASCII 编码
字符集允许用一个八位(基于二进制的,用值 0 或 1 表示的)字段或字节(2^8
=256)表示 256 个字符。这是一个高度受限的编码字符集,它不能表示许多不同语言的
所有字符(如中文和日文),不能表示科学符号,更不能表示古代文字(神秘符号和象形
文字)和音乐符号。通过更改一个字节的长度而使更大的字符集得以被编码,这似乎有效
但完全不切实际。所有的计算机都基于八位字节。解决方法是一种字符编码方案
(Character encoding scheme,CES)— 用定长或变长的多字节序列能够表示比 256
大的数.这些数值接着通过编码字符集被映射到它们表示的字符。
Unicode 的定义
Unicode 编码字符集利用了一个由 128 个三维的组构成的四维编码空间。其中每个
组包含 256 个二维平面。每个平面由 256 个一维的行组成,并且每个行有 256 个单元。
每个单元在这个编码空间内对一个字符编码,或者被声明为未经使用。这种编码概念被称
为 UCS-4;四个八位元用来表示指定组、平面、行和单元的每个字符。
第一个平面(第 00 组的第 00 平面)是基本多语言平面(Basic Multilingual
Plane,BMP)。BMP 按字母、音节、表意符号和各种符号及数字定义了常规使用的字
符。后续的平面用于附加字符或其它还没有发明的编码实体。我们需要这完整的范围去处
理世界上的所有语言;特别是拥有将近 64,000 个字符的一些东亚语言。
BMP 被用作双字节的编码字符集,这种编码字符集确定为 ISO 10646 UCS-2 格式。
ISO 10646 UCS-2 就是指 Unicode(并且两者相同)。BMP,像所有 UCS 平面那样,