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(<
[email protected]>, 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 <
[email protected]>
utf-8(7),
http://www.linuxforum.net/books/UTF-8-Unicode.html
mapping <[email protected]>
2000/11/06
http://cmpp.linuxforum.net
本頁面中文版由中文 man
手冊頁計劃提供。
中文 man 手冊頁計劃:
https://github.com/man-pages-zh/manpages-zh