Unicode 是一种计算机使用的字符编码系统,用于存储和交换文本数据。它为全世界主要书写系统的每个字符提供一个唯一数字(码点)。它还包括书写文字中使用的技术符号、标点和许多其他字符。
Unicode 不仅仅是单纯的字符映射表,它还包括用于对双向文字(如阿拉伯语)进行整理和编码的算法,以及文本格式标准化的规范。
本主题将对 Unicode 展开概述。要了解更完整说明以及可以使用 Unicode 编码的特定语言列表,请访问 Unicode Consortium 网站。
码点
字符是信息的单位,大致对应于自然语言的书面形式中的文字单位。Unicode 定义如何解释字符,而非如何显示字符。
字形是字符的显示或视觉表示,是在计算机屏幕或打印页面上做出的标记。在某些书写系统中,一个字符可能对应多种字形或者多个字符可能对应一种字形。例如,“ll”在西班牙语中为一个字形,但却是两个字符:“l”和“l”。
在 Unicode 中,一个字符映射为一个码点。码点是 Unicode Consortium 为每个书写系统中的每个字符分配的编号。码点表示为 U+ 后面跟四个数字和/或字母。下面是四个不同字符的码点示例:小写的 l、带变音符的小写 u、β 和带重音符的小写 e。
l = U+006C
ü = U+00FC
β = U+0392
é = U+00E9
Unicode 包含 1,114,112 个码点;目前,其中有超过 96,000 个码点已分配给字符。
平面
Unicode 字符编码空间分为 17 个平面,每个平面具有 65,536 个码点。
第一平面(平面 0)是基本多语言平面 (BMP)。BMP 中容纳了绝大多数常用字符,至今,其中的大部分码点均已分配。BMP 包含现代语言中几乎所有字符和许多特殊符号的码点。BMP 中大约有 6,300 个未使用的码点;它们将用于以后添加更多字符。
下一平面(平面 1)是增补多语言平面 (SMP)。SMP 用于历史文字以及音乐符合和数学符号。
字符编码
字符编码定义每个字符、其码点以及如何以位为单位表示码点。如果不知道所用的编码格式,则无法正确解释一个字符串。
编码方案有许多种,但不能轻易进行彼此转换,并且很少有哪种编码方案会考虑多种不同语言的字符。例如,如果您的 PC 设为默认情况下使用 OEM - 拉丁语 II,而您浏览至使用 IBM EBCDIC - 西里尔语的网页,则任何不在拉丁语 II 编码方案中的西里尔语字符都将无法正确显示;它们将被替换成其他字符,例如问号或方块。
因为 Unicode 包含所有现代语言中绝大多数字符的码点,所以 Unicode 字符编码器将允许计算机解释几乎所有已知字符。
目前使用的主要 Unicode 字符编码方案有三种:UTF-8、UTF-16 和 UTF-32。UTF 代表 Unicode 变换格式 (Unicode Transformation Format)。UTF 后面的数字表示用于编码的单位大小(单位为位)。
- UTF-8 使用 8 位可变宽度字符编码。UTF-8 使用 1 到 6 个字节对字符编码;它可以使用少于、等于或多于 UTF-16 的字节对同一字符进行编码。在 UTF-8 中,0 到 127 的每个码点(U+0000 到 U+0127)均用一个字节存储。只有码点 128 (U+0128) 及以上码点才使用 2 到 6 个字节存储。
- UTF-16 使用一个固定宽度的 16 位编码单元。它相对紧凑,一个 16 位编码单元可以容纳所有常用字符。其他字符可使用一对 16 位编码单元表示。
- UTF-32 需要 4 个字节对任意字符编码。多数情况下,用 UTF-32 编码的文档大小几乎是用 UTF-16 编码的同一文档的两倍。每个字符都用一个固定宽度的 32 位编码单元编码。如果有足够的内存空间并且想要为每个字符使用单独的编码单元,则可以使用 UTF-32。
这三种编码形式均对相同的常见字符编码,并且彼此可以转换而不丢失数据。
其他 Unicode 字符编码包括 UTF-7 和 UTF-EBCDIC。还有一种 GB18030 编码,它是等同于 UTF-8 的中文编码,支持简体中文字符和繁体中文字符。