当前位置:文档之家 > UTF-8 and Unicode FAQ

UTF-8 and Unicode FAQ

UTF-8 and Unicode FAQ

by Markus Kuhn

中国LINUX论坛翻译小组xLoneStar[译] 2000年2月

这篇文章说明了在POSIX 系统(Linux,Unix) 上使用Unicode/UTF-8 所需要的信息. 在将来不远的几年里, Unicode 已经很接近于取代ASCII 与Latin-1 编码的位置了. 它不仅允许你处理处理事实上存在于地球上的任何语言文字, 而且提供了一个全面的数学与技术符号集, 因此可以简化科学信息交换.

UTF-8 编码提供了一种简便而向后兼容的方法, 使得那种完全围绕ASCII 设计的操作系统, 比如Unix, 也可以使用Unicode. UTF-8 就是Unix, Linux 已经类似的系统使用Unicode 的方式. 现在是你了解它的时候了.

什么是UCS 和ISO 10646?

国际标准ISO 10646 定义了通用字符集(Universal Character Set, UCS). UCS 是所有其他字符集标准的一个超集. 它保证与其他字符集是双向兼容的. 就是说, 如果你将任何文本字符串翻译到UCS格式, 然后再翻译回原编码, 你不会丢失任何信息.

UCS 包含了用于表达所有已知语言的字符. 不仅包括拉丁语,希腊语, 斯拉夫语,希伯来语,阿拉伯语,亚美尼亚语和乔治亚语的描述, 还包括中文, 日文和韩文这样的象形文字, 以及平假名, 片假名, 孟加拉语, 旁遮普语果鲁穆奇字符(Gurmukhi), 泰米尔语, 印.埃纳德语(Kannada), Malayalam, 泰国语, 老挝语, 汉语拼音(Bopomofo), Hangul, Devangari, Gujarati, Oriya, Telugu 以及其他数也数不清的语. 对于还没有加入的语言, 由于正在研究怎样在计算机中最好地编码它们, 因而最终它们都将被加入. 这些语言包括Tibetian, 高棉语, Runic(古代北欧文字), 埃塞俄比亚语, 其他象形文字, 以及各种各样的印-欧语系的语言, 还包括挑选出来的艺术语言比如Tengwar, Cirth 和克林贡语(Klingon). UCS 还包括大量的图形的, 印刷用的, 数学用的和科学用的符号, 包括所有由TeX, Postscript, MS-DOS,MS-Windows, Macintosh, OCR 字体, 以及许多其他字处理和出版系统提供的字符.

ISO 10646 定义了一个31 位的字符集. 然而, 在这巨大的编码空间中, 迄今为止只分配了前65534 个码位(0x0000 到0xFFFD). 这个UCS 的16位子集称为基本多语言面(Basic Multilingual Plane, BMP). 将被编码在16 位BMP 以外的字符都属于非常特殊的字符(比如象形文字), 且只有专家在历史和科学领域里才会用到它们. 按当前的计划, 将来也许再也不会有字符被分配到从0x000000 到0x10FFFF 这个覆盖了超过100 万个潜在的未来字符的21 位的编码空间以外去了. ISO 10646-1 标准第一次发表于1993 年, 定义了字符集与BMP 中内容的架构. 定义BMP 以外的字符编码的第二部分ISO 10646-2 正在准备中, 但也许要过好几年才能完成. 新的字符仍源源不断地加入到BMP 中, 但已经存在的字符是稳定的且不会再改变了.

UCS 不仅给每个字符分配一个代码, 而且赋予了一个正式的名字. 表示一个UCS 或Unicode 值的十六进制数, 通常在前面加上"U+", 就象U+0041 代表字符"拉丁大写字母A". UCS 字符U+0000 到U+007F 与US-ASCII(ISO 646) 是一致的, U+0000 到U+00FF 与ISO 8859-1(Latin-1) 也是一致的. 从U+E000 到U+F8FF, 已经BMP 以外的大范围的编码是为私用保留的.

什么是组合字符?

UCS里有些编码点分配给了组合字符.它们类似于打字机上的无间隔重音键. 单个的组合字符不是一个完整的字符. 它是一个类似于重音符或其他指示标记, 加在前一个字符后面. 因而, 重音符可以加在任何字符后面. 那些最重要的被加重的字符, 就象普通语言的正字法(orthographies of common languages)里用到的那种, 在UCS 里都有自己的位置, 以确保同老的字符集的向后兼容性. 既有自己的编码位置, 又可以表示为一个普通字符跟随一个组合字符的被加重字符, 被称为预作字符(precomposed characters). UCS 里的预作字符是为了同没有预作字符的旧编码, 比如ISO 8859, 保持向后兼容性而设的
. 组合字符机制允许在任何字符后加上重音符或其他指示标记, 这在科学符号中特别有用, 比如数学方程式和国际音标字母, 可能会需要在一个基本字符后组合上一个或多个指示标记.

UCS里有些编码点分配给了组合字符.它们类似于打字机上的无间隔重音键. 单个的组合字符不是一个完整的字符. 它是一个类似于重音符或其他指示标记, 加在前一个字符后面. 因而, 重音符可以加在任何字符后面. 那些最重要的被加重的字符, 就象普通语言的正字法(orthographies of common languages)里用到的那种, 在UCS 里都有自己的位置, 以确保同老的字符集的向后兼容性. 既有自己的编码位置, 又可以表示为一个普通字符跟随一个组合字符的被加重字符, 被称为预作字符(precomposed characters). UCS 里的预作字符是为了同没有预作字符的旧编码, 比如ISO 8859, 保持向后兼容性而设的. 组合字符机制允许在任何字符后加上重音符或其他指示标记, 这在科学符号中特别有用, 比如数学方程式和国际音标字母, 可能会需要在一个基本字符后组合上一个或多个指示标记.

组合字符跟随着被修饰的字符. 比如, 德语中的元音变音字符("拉丁大写字母 A 加上分音符"), 既可以表示为UCS 码U+00C4 的预作字符, 也可以表示成一个普通"拉丁大写字母A" 跟着一个"组合分音符":U+0041 U+0308 这样的组合. 当需要堆叠多个重音符, 或在一个基本字符的上面和下面都要加上组合标记时, 可以使用多个组合字符. 比如在泰国文中, 一个基本字符最多可加上两个组合字符.

什么是UCS 实现级别?

不是所有的系统都需要支持象组合字符这样的UCS 里所有的先进机制. 因此ISO 10646 指定了下列三种实现级别:

下载Word文档免费下载:

UTF-8 and Unicode FAQ下载

(共9页)