Unicode
Unicode是規定了一致性處理全世界文字的字集、編碼字元集、字元編碼方式的字碼業界規格。目前最新版本是2021年9月公布的14.0.0,已收錄超過14萬個字元。
早年每個國家、廠商都自行制定不同的字碼表,互相無法相容,也缺乏在相同環境處理不同字碼表的方式(例如早年繁簡文字不能共存,台商在中國的子公司內部也照樣用Big5等),這也讓軟體需要為各語言客製化開發不同版本、也不利於網際網路資料流通。
1980年代末期,Xerox、微軟、Apple、IBM……等眾多廠商聯合組成了Unicode聯盟(Unicode Consortium),試圖制定出一個能囊括全球語言、文字的單一字元編碼,以改善原來的不便。之後國際標準ISO/IEC 10646也與Unicode進行整合。
Unicode也設計成能夠盡可能相容既有的字元編碼,例如為全形字元編碼,讓CJK文字原有資料的全形、半形能夠在Unicode上繼續區別。對於幾個主要的既有編碼,如Big5,也確保了來回相容性(見相容漢字)。雖然這讓Unicode收字其實不是完全的理想化,處處充滿為了相容既有規格而作的妥協,但也因此能夠順利讓所有語言、環境都順利逐漸過渡到Unicode。
發展概要
主要歷史
- 1.0.0(1991年10月)最初包含的語系有:阿拉伯字母、亞美尼亞字母、孟加拉文、注音符號、西里爾字母、天城文、喬治亞字母、希臘字母、古吉拉特文、古木基文、諺文、希伯來字母、平假名、卡納達文、片假名、寮文字、拉丁字母、馬拉雅拉姆文、奧里亞文、泰米爾文、泰盧固文、泰文字與藏文,共24種文字體系、7,151字。
- 1.0.1(1992年6月)定義中日韓統一表意文字最初的20,902個字,總字數達28,359字。
- 1.1(1993年6月)於原有2,350個韓文音節之外,另外新增4,306個韓文音節。
- 2.0(1996年7月)
- 韓文大挪移:刪掉原來韓文音節的區塊,另找一塊編碼範圍,放入現代韓文所有11,172邏輯上可能的音節。這也讓Unicode與舊1.x版本不相容。
- 建立補充平面:放棄16位元編碼全世界文字的幻想,正式加上補充平面機制,讓可編碼範圍從6.5萬字一口氣增加到111萬字。確立代理對機制。
- 3.0(1999年9月)
- 在原來韓文騰出來的空間,編入了6,582個漢字(統合漢字擴充A)。這也使得Unicdoe排序時,統合漢字擴充A會排在常用的統合漢字前面。
- 新增注音符號擴充區。(加入台語方音符號)
- 3.1(2001年3月):一口氣加入了統合漢字擴充B共42,711字,使整個Unicode一口氣達到94,205字。但因在短時間內增加了大量的漢字,審查不足的結果,這部分加入了許多重複的字形以及幽靈漢字。這也成為之後審議新增文字要明確佐證的原因。
- 5.1(2008年4月)
- 開始對漢字適用異體字選擇子(主要用在日文)。
- 定義文字超過10萬字。
- 6.0(2010年10月):加入Emoji。
- 12.1(2019年5月7日):加入日本新元號合字「㋿」。(這個版本只加了一個字)
- 13.0(2020年3月)
- 加入方音符號遺漏的「ㆻ」字與粵語注音符號。
- Unicode總收文字體系達154種,共143,924字。本站字碼資料庫目前支援此版本。
- 14.0(2021年9月):目前最新的版本
創立經過
1984年,ISO的字元編碼規格委員会 (ISO/TC 97/SC2) 決定著手制定一套不需要切換字元集,可以囊括全世界所有文字的單一字元集的字碼規格 (ISO 10646) ,並設立專屬作業群組 (ISO/TC 97/SC 2/WG 2) 開始作業。此群組花費數年討論過各種提案後,於1990年推出ISO 10646的初版草稿(DIS 10646#DIS 10646第1版)。這份草稿裡,漢字以32位元處理,並直接將各國的漢字表各自放進表裡,互相獨立。但中國不希望漢字個別分開編碼,希望能統合起來處理,而反對這份草案。故WG 2又另外成立了CJK-JRG (Joint Research Group) 群組另外來討論漢字的編碼方針。
在這個官方組織之外,1987年前後,Xerox 的 Joe Becker 與 Lee Collins 也開發了一套收錄了全世界所有文字的編碼,並於1989年9月以「Unicode Draft 1」的名稱發表。這份規格則試圖以16位元的固定長度來處理全世界所有文字,所以積極對CJK漢字進行統合到2萬字上下,還保留了約3萬字的空間可供未來編碼其它文字。經過多次細節微調後,在1991年1月時,許多支持廠商合組了 Unicode 聯盟,發布了 Unicode Final Draft。
1991年6月,由於各國多傾向支持16位元的Unicode方案,ISO/IEC 10646 的「DIS 10646第1版」草稿遭到否決。自此 ISO 10646 開始試圖與 Unicode 進行整合。在中國與Unicode聯盟的積極介入之下,CJK-JRG也開始著手進行ISO 10646 與 Unicode 的整合。CJK-JRG 先以各國的漢字表為基準,制定了漢字統合標準,編訂了ISO 10646 / Unicode用的統合漢字表。
自此後,雖然Unicode與ISO 10646是各自維護的不同標準,實際上是相同內容的編碼表,兩者保持相容。例如Unicode 1.1對應於ISO 10646-1:1993,Unicode 3.0對應於ISO 10646-1:2000,Unicode 3.2對應於ISO 10646-2:2001,Unicode 4.0對應於ISO 10646:2003,Unicode 5.0對應於ISO 10646:2003及附錄1–3。
相較於ISO 10646主要公布的是字碼表,Unicode聯盟則維護更多細節的資料。有許多技術報告,以及UniHan資料庫等。
Unicode技術文件與UCD
Unicode作為一個處理全世界所有文字體系的編碼,面對各國書寫體系的複雜性,又承受既有規格的相容問題,制定了大量的技術文件來解釋Unicode文字應該怎樣被處理。例如:
- UAX#15 Unicode正規化形式規定了整個Unicode體系中同一個文字可能被以多種組合、分解形式表達的情況,怎樣才是正規的形式。
- UAX#50 直排文字方向規定了字符以直排形式處理時,該如何旋轉,以相容日本、台灣既有直排編排習慣。
- UAX#9 雙向文字演算法規定了阿拉伯、希伯來文等由右至左書寫的文字體系,夾雜數字或其他語系文字混排時,該如何處理。
其中很多技術文件都是特定文字體系才會碰到的問題,對其他語系使用者來說可能一輩子都碰不到。藉由Unicode技術文件的形式,才讓不同文化的軟體作者得以得知其它語系的需求,並盡可能加以支援,儼然是世界語言文化的寶庫。
配合這些技術文件,Unicode裡每個文字都被標註著大量的資訊。例如前述的直排方向、雙向書寫定義,以及正規化會用到的分解序列、組合類別等。這些資料以 Unicode Database (UCD) 的形式公開在 Unicode 官方網站上。本站字碼資料庫也可以查詢到13.0版為止的UCD。
編碼
收錄原則
《The Unicode Standard Version 6.2 – Core Specification》文件提示了Unicode的十大設計原則:
- Universality:提供單一、綜合的字元集,編碼一切現代與大部分歷史文獻的字元。
- Efficiency:易於處理與分析。
- Characters, not glyphs:字元,而不是字形。
- Semantics:字元要有良好定義的語意。
- Plain text:僅限於文字字元。
- Logical order:預設序列就是其邏輯順序。
- Unification:把不同語言的同一文字體系(scripts)中相同字元統一起來。
- Dynamic composition:附加符號可以動態組合。
- Stability:已分配的字元與語意不再改變。
- Convertibility:Unicode與其他知名字碼可以精確轉換。
補充平面
1980年代初期的構想中,Unicode是16位元固定長度,共65,536的碼位來收錄全世界的文字。然而在Unicode 1.0發表時,各國就殺紅眼爭奪預留的2萬多字空間。如台灣、日本、中國、越南、新加坡提出的新增漢字就有15,000字,古韓文音節約5000字,還有大量未收錄的語言。
於是乎Unicode打算用16位元收集全世界所有文字的算盤早在這個時候就已經觸礁,1996年發表Unicode 2.0時,就決定擴充增加碼點空間。但1996年當時,已經有許多系統(如Java的char型別、Windows NT的系統API)以16位元為前提支援Unicode,所以又設計了代理對機制去相容這些系統。詳見UTF-16。
平面
每個平面包含65,536個碼點。
平面 | 碼點 | 英文名稱 | 縮寫 | 中文名稱 | 說明 |
---|---|---|---|---|---|
第0平面 | 0000-FFFF | Basic Multilingual Plane | BMP | 基本多言語平面 | 世界主要常用文字均定義在此平面。 |
第1平面 | 10000-1FFFF | Supplementary Multilingual Plane | SMP | 補充多言語平面 | 古代文字、罕用符號、Emoji等。 |
第2平面 | 20000-2FFFF | Supplementary Ideographic Plane | SIP | 表意文字補充平面 | 整個平面都用來放罕用漢字。 |
第3平面 | 30000-3FFFF | Tertiary Ideographic Plane | TIP | 第三漢字面 | 表意文字補充平面放不下的漢字,未來計畫收錄甲骨文等古漢字。 |
第4~13平面 | 40000-DFFFF | 未使用(未來用途亦尚未決定)。 | |||
第14平面 | E0000-EFFFF | Supplementary Special-purpose Plane | SSP | 特別用途補充平面 | 擺放特殊控制字元,目前只有語言標籤與異體字選擇子。 |
第15~16平面 | F0000-10FFFF | Private Use Plane | PUP | 私人使用區 | 全部保留作為造字區使用。 |
字元編碼方式
Unicode正式規定的編碼方式有 UTF-8、UTF-16、UTF-32 三種,以相容各種不同的處理環境,亦各有優劣。
請參考這些條目的詳細說明。
- 建立於 2022 年 3 月 15 日 19 時 41 分
- 本條目共被 1 位不同作者編輯過 2 次
- 最後一次修改於 2022 年 3 月 17 日 22 時 03 分