UTF-8 and Unicode FAQ(轉)

ba發表於2007-08-11
UTF-8 and Unicode FAQ(轉)[@more@]轉自:

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, 保持向後相容性而設的. 組合字元機制允許在任何字元後加上重音符或其他指示標記, 這在科學符號中特別有用, 比如數學方程式和國際音標字母, 可能會需要在一個基本字元後組合上一個或多個指示標記.

組合字元跟隨著被修飾的字元. 比如, 德語中的母音變音字元 ("拉丁大寫字母A 加上分音符"), 既可以表示為 UCS 碼 U+00C4 的預作字元, 也可以表示成一個普通 "拉丁大寫字母A" 跟著一個"組合分音符":U+0041 U+0308 這樣的組合. 當需要堆疊多個重音符, 或在一個基本字元的上面和下面都要加上組合標記時, 可以使用多個組合字元. 比如在泰國文中, 一個基本字元最多可加上兩個組合字元.

什麼是 UCS 實現級別?
不是所有的系統都需要支援象組合字元這樣的 UCS 裡所有的先進機制. 因此 ISO 10646 指定了下列三種實現級別:

級別1
不支援組合字元和 Hangul Jamo 字元 (一種特別的, 更加複雜的韓國文的編碼, 使用兩個或三個子字元來編碼一個韓文音節)
級別2
類似於級別1, 但在某些文字中, 允許一列固定的組合字元 (例如, 希伯來文, 阿拉伯文, Devangari, 孟加拉語, 果魯穆奇語, Gujarati, Oriya, 泰米爾語, Telugo, 印.埃納德語, Malayalam, 泰國語和寮國語). 如果沒有這最起碼的幾個組合字元, UCS 就不能完整地表達這些語言.
級別3
支援所有的 UCS 字元, 例如數學家可以在任意一個字元上加上一個 tilde(顎化符號,西班牙語字母上面的~)或一個箭頭(或兩者都加).
什麼是 Unicode?
歷史上, 有兩個獨立的, 創立單一字符集的嘗試. 一個是國際標準化組織(ISO)的 ISO 10646 專案, 另一個是由(一開始大多是美國的)多語言軟體製造商組成的協會組織的 Unicode 專案. 幸運的是, 1991年前後, 兩個專案的參與者都認識到, 世界不需要兩個不同的單一字符集. 它們合併雙方的工作成果, 併為創立一個單一編碼表而協同工作. 兩個專案仍都存在並獨立地公佈各自的標準, 但 Unicode 協會和 ISO/IEC JTC1/SC2 都同意保持 Unicode 和 ISO 10646 標準的碼錶相容, 並緊密地共同調整任何未來的擴充套件.

[ Last edited by frog on 2006-3-14 at 09:39 ]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-947261/,如需轉載,請註明出處,否則將追究法律責任。

相關文章