Arch manual pages

UNICODE(7) Linux Programmer's Manual UNICODE(7)

Unicode - 16 位統一超級字符集

國際標準 ISO 10646 定義了 通用字符集 (Universal Character Set, UCS). UCS 包含所有別的字符集標準裏的字符,並且保證了 互換兼容性 (round-trip compatibility), 也就是說,當一個字符串在 UCS 和任何別的字符集之間轉換時, 轉換表可以保證不會有信息丟失現象發生.

UCS 包含了表示幾乎所有已知的語言所必需的字符.該字符集既包 括那些使用擴展拉丁語的語言,也包括下面的這些語言: Greek, Cyrillic, Hebrew,Arabic, Armenian, Gregorian, Japanese, Chinese, Hiragana, Katakana, Korean, Hangul, Devangari, Bengali, Gurmukhi, Gujarati, Oriya, Tamil, Telugu, Kannada, alayam, Thai, Lao, Bopomofo,等等.而另外的語言,例如 Tibetian, Khmer, Runic, Ethiopian, Hieroglyphics, 各種 Indo-European 語言, 還有許多其他的語言, 正在被加入其 中.1993 年發佈該標準的時候, 還不清楚怎樣才能對後面加入的這些 語言中的大部分作更好的編碼. 另外, 這些語言所需的字符, 以及由 TeX, PostScript, MS-DOS, Macintosh, Videotext, OCR, 還有很 多字處理系統所提供的大量的圖形, 印刷體, 數學和科學符號, 都已 被包括進來, 還包括了一些特別編碼以保證和所有其它已存在字符集 標準的可逆轉換兼容性.

UCS 標準 (ISO 10646) 描述了一個 31 位字符集的體系, 不過, 目前 只使用了前面 65534 個編碼位置 (0x0000-0xfffd, 它們被稱爲 基本多語言塊 (Basic Multilingual Plane,BMP)), 分配給了字符, 而且我們 估計只有那些很古怪的字符(比如. Hieroglyphics)爲了專門 的科學目的, 纔會在將來的某個時候, 需要 16 位的 BMP 之外的部分.

從 0x0000 到 0x007f 之間的 UCS 字符和經典 US-ASCII 字符集是一樣的, 而從 0x0000 到 0x00ff 之間的字符等於 ISO 8859-1 Latin-1 字符集.

一些 UCS 編碼被分配給了 組合字符(combining characters). 這樣的情形有點類似於打字機上的重音鍵. 一個組合字符只是 給前面的字符添加一個重音. 在 UCS 裏最重要的重音字符都有他們自己的編碼, 不過, 組合字符機制允許給任一字符添加重音和其他的可識別記號. 組合字符總是跟在那些他們所修飾的字符後面. 例如,德語符號 Umlaut-A (帶分音符的大寫拉丁字母 A)既可以表示爲 UCS 編碼 0x00c4, 也可以 用一個正常的"大寫拉丁字母 A"後面跟一個"組合分音符號": 0x0041 0x0308 來表示.

由於不是所有系統都支持象組合字符這樣的高級機制, ISO 10646 指明瞭 UCS 的三種實現級別:
級別 1 (Level 1)
不支持組合字符和 Hangul Jamo 字符(朝鮮語的一種更復 雜的專用的編碼, Hangul 音節編碼成兩或三個亞字符).
級別 2 (Level 2)
類似於級別1, 卻在一些語言裏面也支持一些組合字符. (比如. Hebrew, Arabic, Devangari, Bengali, Gurmukhi, Gujarati, Oriya, Tamil, Telugo, Kannada, Malayalam, Thai 和 Lao).
級別 3 (Level 3)
支持所有 UCS 字符.

Unicode 協會發布的 Unicode 1.1 標準和 ISO 10646 所描述的 那樣, 在第 3 執行級別只包括了 UCS (基本多語言塊 Basic Multilingual Plane). Unicode 1.1 還爲一些 ISO 10646 的字符定義加 入了一些語義定義.

在 Linux 下, 爲了降低組合字符的實現複雜性, 目前只包括了執 行級別 1 下的 BMP. 更高的執行級別更適合於專門的字處理格式, 而不是一個普通的系統字符集. 在 linux 下 C 的類型 wchar_t 是一個 有符號位的 32 位整型並且其值解釋爲 UCS4 編碼.

本地化設置指明系統字符編碼是使用諸如 UTF-8 還是 ISO 8859-1這樣的編碼. 象庫函數 wctomb, mbtowc, 或者 wprintf 就可以用於內部 wchar_t 字符及字符串與系統字符編碼之間做轉換.

BMP 裏, 0xe000 到 0xf8ff 的範圍被標準保留做私用因而永遠不會 被分配給任何字符. 對於 Linux 社區, 該私有區被再細分爲可以被任何終端用戶 獨立使用的 0xe000 到 0xefff 的範圍, 以及從 0xf000 到 0xf8ff 給所有 linux 用戶所共用的 linux 區.H. Peter Anvin(<Peter.Anvin@linux.org>, Yggdrasil Computing,Inc) 現在維護登記分配到 linux 區的字符. 該區包括一些 Unicode 中缺少的 DEC VT100 的圖形字符, 這使控制檯 的字體緩衝區可以直接獲得這些字符, 該區還包括一些象 Klingon 這樣的古老語言所使用的字符.

*
Information technology - Universal Multiple-Octet Coded Character Set (UCS) - Part 1: Architecture and Basic Multilingual Plane. International Standard ISO 10646-1, International Organization for Standardization, Geneva, 1993.

這是 UCS 的正式規範, 非常正式, 也很厚, 還非常貴. 如果要定 購信息, 去看看 www.iso.ch.

*
The Unicode Standard - Worldwide Character Encoding Version 1.0. The Unicode Consortium, Addison-Wesley, Reading, MA, 1991.

Unicode 已經有 1.1.4 版可用,與 1.0 版的差別可以在 ftp.unicode.org 找到. Unicode 2.0 也將在 1996 年出版一本書.

*
S. Harbison, G. Steele. C - A Reference Manual. Fourth edition, Prentice Hall, Englewood Cliffs, 1995, ISBN 0-13-326224-3.

一本很好的 C 語言編程參考書. 現在的第四版包含了 1994 年對標準 ISO C 的第一次修正 (ISO/IEC 9899:1990), 添加了大量 處理多種字符集的新的 C 庫函數.

在寫這個手冊頁的時候,linux 對 UCS 的 C 語言庫支持遠未完成.

Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>

utf-8(7), http://www.linuxforum.net/books/UTF-8-Unicode.html

mapping <mapping@263.net>

2000/11/06

http://cmpp.linuxforum.net

本頁面中文版由中文 man 手冊頁計劃提供。
中文 man 手冊頁計劃:https://github.com/man-pages-zh/manpages-zh
1995-12-27 Linux