📄 00000002.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: shunder (愈快乐愈堕落......), 信区: Linux <BR>标 题: UTF-8 and Unicode FAQ(转载) <BR>发信站: BBS 水木清华站 (Wed Apr 26 20:59:05 2000) <BR> <BR>UTF-8 and Unicode FAQ <BR>by Markus Kuhn <BR>中国LINUX论坛翻译小组 xLoneStar[译] 2000年2月 <BR> <BR>这篇文章说明了在 POSIX 系统 (Linux,Unix) 上使用 Unicode/UTF-8 所需要的信息. <BR>在将来不远的几年里, Unicode 已经很接近于取代 ASCII 与 Latin-1 编码的位置了. <BR>它不仅允许你处理处理事实上存在于地球上的任何语言文字, 而且提供了一个全面的数 <BR>学与技术符号集, 因此可以简化科学信息交换. <BR>UTF-8 编码提供了一种简便而向后兼容的方法, 使得那种完全围绕 ASCII 设计的操作系 <BR>统, 比如 Unix, 也可以使用 Unicode. UTF-8 就是 Unix, Linux 已经类似的系统使用 <BR> Unicode 的方式. 现在是你了解它的时候了. <BR> <BR>什么是 UCS 和 ISO 10646? <BR>国际标准 ISO 10646 定义了 通用字符集 (Universal Character Set, UCS). UCS 是所 <BR>有其他字符集标准的一个超集. 它保证与其他字符集是双向兼容的. 就是说, 如果你将 <BR>任何文本字符串翻译到 UCS格式, 然后再翻译回原编码, 你不会丢失任何信息. <BR>UCS 包含了用于表达所有已知语言的字符. 不仅包括拉丁语,希腊语, 斯拉夫语,希伯来 <BR>语,阿拉伯语,亚美尼亚语和乔治亚语的描述, 还包括中文, 日文和韩文这样的象形文字 <BR>, 以及 平假名, 片假名, 孟加拉语, 旁遮普语果鲁穆奇字符(Gurmukhi), 泰米尔语, 印 <BR>.埃纳德语(Kannada), Malayalam, 泰国语, 老挝语, 汉语拼音(Bopomofo), Hangul, D <BR>evangari, Gujarati, Oriya, Telugu 以及其他数也数不清的语. 对于还没有加入的语 <BR>言, 由于正在研究怎样在计算机中最好地编码它们, 因而最终它们都将被加入. 这些语 <BR>言包括 Tibetian, 高棉语, Runic(古代北欧文字), 埃塞俄比亚语, 其他象形文字, 以 <BR>及各种各样的印-欧语系的语言, 还包括挑选出来的艺术语言比如 Tengwar, Cirth 和 <BR>克林贡语(Klingon). UCS 还包括大量的图形的, 印刷用的, 数学用的和科学用的符号, <BR> 包括所有由 TeX, Postscript, MS-DOS,MS-Windows, Macintosh, OCR 字体, 以及许 <BR>多其他字处理和出版系统提供的字符. <BR>ISO 10646 定义了一个 31 位的字符集. 然而, 在这巨大的编码空间中, 迄今为止只分 <BR>配了前 65534 个码位 (0x0000 到 0xFFFD). 这个 UCS 的 16位子集称为 基本多语言面 <BR> (Basic Multilingual Plane, BMP). 将被编码在 16 位 BMP 以外的字符都属于非常特 <BR>殊的字符(比如象形文字), 且只有专家在历史和科学领域里才会用到它们. 按当前的计 <BR>划, 将来也许再也不会有字符被分配到从 0x000000 到 0x10FFFF 这个覆盖了超过 100 <BR> 万个潜在的未来字符的 21 位的编码空间以外去了. ISO 10646-1 标准第一次发表于 <BR>1993 年, 定义了字符集与 BMP 中内容的架构. 定义 BMP 以外的字符编码的第二部分 <BR>ISO 10646-2 正在准备中, 但也许要过好几年才能完成. 新的字符仍源源不断地加入到 <BR> BMP 中, 但已经存在的字符是稳定的且不会再改变了. <BR>UCS 不仅给每个字符分配一个代码, 而且赋予了一个正式的名字. 表示一个 UCS 或 Un <BR>icode 值的十六进制数, 通常在前面加上 "U+", 就象 U+0041 代表字符"拉丁大写字母 <BR>A". UCS 字符 U+0000 到 U+007F 与 US-ASCII(ISO 646) 是一致的, U+0000 到 U+00F <BR>F 与 ISO 8859-1(Latin-1) 也是一致的. 从 U+E000 到 U+F8FF, 已经 BMP 以外的大范 <BR>围的编码是为私用保留的. <BR> <BR>什么是组合字符? <BR>UCS里有些编码点分配给了 组合字符.它们类似于打字机上的无间隔重音键. 单个的组合 <BR>字符不是一个完整的字符. 它是一个类似于重音符或其他指示标记, 加在前一个字符后 <BR>面. 因而, 重音符可以加在任何字符后面. 那些最重要的被加重的字符, 就象普通语言 <BR>的正字法(orthographies of common languages)里用到的那种, 在 UCS 里都有自己的 <BR>位置, 以确保同老的字符集的向后兼容性. 既有自己的编码位置, 又可以表示为一个普 <BR>通字符跟随一个组合字符的被加重字符, 被称为 预作字符(precomposed characters). <BR> UCS 里的预作字符是为了同没有预作字符的旧编码, 比如 ISO 8859, 保持向后兼容性 <BR>而设的. 组合字符机制允许在任何字符后加上重音符或其他指示标记, 这在科学符号中 <BR>特别有用, 比如数学方程式和国际音标字母, 可能会需要在一个基本字符后组合上一个 <BR>或多个指示标记. <BR>组合字符跟随着被修饰的字符. 比如, 德语中的元音变音字符 ("拉丁大写字母A 加上分 <BR>音符"), 既可以表示为 UCS 码 U+00C4 的预作字符, 也可以表示成一个普通 "拉丁大写 <BR>字母A" 跟着一个"组合分音符":U+0041 U+0308 这样的组合. 当需要堆叠多个重音符, <BR>或在一个基本字符的上面和下面都要加上组合标记时, 可以使用多个组合字符. 比如在 <BR>泰国文中, 一个基本字符最多可加上两个组合字符. <BR> <BR>什么是 UCS 实现级别? <BR>不是所有的系统都需要支持象组合字符这样的 UCS 里所有的先进机制. 因此 ISO 1064 <BR>6 指定了下列三种实现级别: <BR>级别1 <BR>不支持组合字符和 Hangul Jamo 字符 (一种特别的, 更加复杂的韩国文的编码, 使用两 <BR>个或三个子字符来编码一个韩文音节) <BR>级别2 <BR>类似于级别1, 但在某些文字中, 允许一列固定的组合字符 (例如, 希伯来文, 阿拉伯文 <BR>, Devangari, 孟加拉语, 果鲁穆奇语, Gujarati, Oriya, 泰米尔语, Telugo, 印.埃纳 <BR>德语, Malayalam, 泰国语和老挝语). 如果没有这最起码的几个组合字符, UCS 就不能 <BR>完整地表达这些语言. <BR>级别3 <BR>支持所有的 UCS 字符, 例如数学家可以在任意一个字符上加上一个 tilde(颚化符号,西 <BR>班牙语字母上面的~)或一个箭头(或两者都加). <BR> <BR>什么是 Unicode? <BR>历史上, 有两个独立的, 创立单一字符集的尝试. 一个是国际标准化组织(ISO)的 ISO <BR>10646 项目, 另一个是由(一开始大多是美国的)多语言软件制造商组成的协会组织的 U <BR>nicode 项目. 幸运的是, 1991年前后, 两个项目的参与者都认识到, 世界不需要两个不 <BR>同的单一字符集. 它们合并双方的工作成果, 并为创立一个单一编码表而协同工作. 两 <BR>个项目仍都存在并独立地公布各自的标准, 但 Unicode 协会和 ISO/IEC JTC1/SC2 都同 <BR>意保持 Unicode 和 ISO 10646 标准的码表兼容, 并紧密地共同调整任何未来的扩展. <BR>那么 Unicode 和 ISO 10646 不同在什么地方? <BR>Unicode 协会公布的 Unicode 标准 严密地包含了 ISO 10646-1 实现级别3的基本多语 <BR>言面. 在两个标准里所有的字符都在相同的位置并且有相同的名字. <BR>Unicode 标准额外定义了许多与字符有关的语义符号学, 一般而言是对于实现高质量的 <BR>印刷出版系统的更好的参考. Unicode 详细说明了绘制某些语言(比如阿拉伯语)表达形 <BR>式的算法, 处理双向文字(比如拉丁与希伯来文混合文字)的算法和 排序与字符串比较 <BR>所需的算法, 以及其他许多东西. <BR>另一方面, ISO 10646 标准, 就象广为人知的 ISO 8859 标准一样, 只不过是一个简单 <BR>的字符集表. 它指定了一些与标准有关的术语, 定义了一些编码的别名, 并包括了规范 <BR>说明, 指定了怎样使用 UCS 连接其他 ISO 标准的实现, 比如 ISO 6429 和 ISO 2022. <BR> 还有一些与 ISO 紧密相关的, 比如 ISO 14651 是关于 UCS 字符串排序的. <BR>考虑到 Unicode 标准有一个易记的名字, 且在任何好的书店里的 Addison-Wesley 里有 <BR>, 只花费 ISO 版本的一小部分, 且包括更多的辅助信息, 因而它成为使用广泛得多的参 <BR>考也就不足为奇了. 然而, 一般认为, 用于打印 ISO 10646-1 标准的字体在某些方面的 <BR>质量要高于用于打印 Unicode 2.0的. 专业字体设计者总是被建议说要两个标准都实现 <BR>, 但一些提供的样例字形有显著的区别. ISO 10646-1 标准同样使用四种不同的风格变 <BR>体来显示表意文字如中文, 日文和韩文 (CJK), 而 Unicode 2.0 的表里只有中文的变体 <BR>. 这导致了普遍的认为 Unicode 对日本用户来说是不可接收的传说, 尽管是错误的. <BR> <BR>什么是 UTF-8? <BR>首先 UCS 和 Unicode 只是分配整数给字符的编码表. 现在存在好几种将一串字符表示 <BR>为一串字节的方法. 最显而易见的两种方法是将 Unicode 文本存储为 2 个 或 4 个字 <BR>节序列的串. 这两种方法的正式名称分别为 UCS-2 和 UCS-4. 除非另外指定, 否则大多 <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -