一、概述
通用多八位編碼字符集(UCS,Universal Multiple-Octet Coded Character Set)是國際標準化組織(ISO)制定的一種字符編碼標準,它是國際標準化組織ISO/IEC制定的旨在實現全球所有文字符號統一編碼的一項重要的國際標準。
1、UCS的淵源
字符集及其編碼是計算機系統中表示、儲存、處理和交換文本信息的基礎。有關統計表明,目前世界各個國家和民族幾乎有6 800多種不同的語言和文字在使用。隨著經濟全球化,使用計算機處理、存儲和傳輸任意多種語言文字的需求日益迫切,因而必須為計算機系統建立一個多文種信息處理環境。
我們知道,ISO對字符編碼早就有ISO/IEC 646,它是采用7位二進制數字對ASCII 字符進行編碼,它提供了27 = 128編碼空間,對圖形字符符號和控制字符予以編碼而形成的字符代碼。然而,對于文字字符的編碼采用7位編碼顯然是不夠的。為了兼容已發布使用的ASCII 字符集(ISO/IEC 646),ISO又發布了ISO/IEC 2022,它是一個七位編碼向八位編碼過渡的標準,以更便于計算機的信息交換,為后續的多字節編碼提供了一種擴充方法。我國等同采用ISO/IEC 646和ISO/IEC 2022發布的標準是GB/T 1988和GB/T 2311。
欲詳細了解上述兩個標準的請進入:GB/T 1988;GB/T 2311
許多年來,絕大多數計算機系統所采用的字符集都是以國際標準ISO/IEC 2022為基礎的。ISO/IEC 2022定義了七位代碼和八位代碼的空間及代碼空間的擴充技術,即除了標準ASCII 字符集之外,還有其它幾百種不同的擴充字符集(包括我國的GB 2312和GBK漢字字符集)。不同字符集各有一個惟一的代碼頁號。當文本中出現非ASCII 字符時,先使用代碼頁號指出它屬于哪一個字符集,然后才是該字符在字符集中的編碼。由于這些字符集沒有哪一個可以適用于所有的字母、標點符號和常用的技術符號,其編碼還會互相沖突(不同字符集中可能使用相同的代碼代表兩個不同的字符,或使用不同的代碼代表相同的字符),因此不僅使用比較繁瑣,而且在不同的系統中交換數據時,總會有損壞的危險,因互不兼容。
于是,早在1984年,國際標準化組織(ISO)就啟動了通用多八位編碼字符集(UCS)的項目研究。所謂“通用多八位”,就是采用多個八位(字節)對字符進行編碼,若通常采用四個八位編碼,即可提供達13億個編碼空間,其用來容納世界所有文字是綽綽有余的。
2、UCS字符集的發布與修訂
基于ISO研究的通用多八位編碼(UCS)技術,在1993年ISO首次發布了相應的標準,當時是一個系列標準,由兩部分構成。在1993年首版發布時,僅發布了第1部分,在2000年對第1部分進行了第1次修訂,隨后發布了第2部分。它們是:ISO/EEC 10646-1:2000《信息技術 通用多八位字符集 第1部分:結構和基本的多文種平面》; ISO/EEC 10646-2:2001《信息技術 通用多八位字符集 第2部分:輔助平面》。2003年12月ISO將兩個部分合二為一,修訂為ISO/IEC 10646:2003《信息技術 通用多八位字符集(UCS)》,收納了基本的多文種平面和輔助平面的內容。通用多八位字符集(UCS)的意義詳見下表1-2。
表 1-2:ISO通用多八位字符集(UCS)的意義
后期,ISO不斷的對ISO/IEC 10646進行了多次修訂,截止到2022年底,其最新版本是2020年版,這是對其的第6次修訂版。事實上,ISO對10646的每次修訂,對編碼技術的內容修訂變化不大;主要是對編碼字符集的不斷擴充,即對世界各國的文字不斷地收錄到UCS字符集來,如CJK統一漢字擴充,從擴充A目前已到擴充F。
3、我國等同采用ISO/IEC 10646的標準
我國在1993年等同采用了ISO/IEC 10646-1:1993發布了國家標準GB 13000.1-1993;在2010年對其進行了修訂,等同采用的是ISO/IEC 10646:2003,發布了國家標準GB 13000-2010《信息技術 通用多八位編碼字符集(UCS)》。它在2017年被國家轉化為推薦性標準,不再強制。這些年來,雖然ISO/IEC 10646標準進行了多次的修訂,但GB/T 13000標準并未隨之修訂,這是因為ISO對10646標準的修訂對其UCS編碼的技術原理變化不大的緣故。
欲詳細了解GB/T 13000標準修訂情況的請進入。
二、UCS字符集簡介
下述主要依據GB/T 13000-2010標準對UCS字符集做一簡要介紹,且重點介紹UCS編碼的技術的內容,對于編碼字符情況應參見ISO/IEC 10646-2020標準。另外,GB/T 13000-2010是由33章和19個附錄所構成,內容太豐富。若要詳細了解GB/T 13000-2010標準具體內容的請查閱下附件。
附件:GB/T 13000-2010《信息技術 通用多八位編碼字符集(UCS)》
1、關于編碼體系結構
UCS使用了一個被視為單一實體并由128個三維組構成的四維編碼空間,它稱為正則形式,其結構如下圖2-1-1所示;其下圖2-1-2為其代碼結構示意;其下圖2-1-3給出了UCS的00組結構的布局示意。每個組包含256個二維平面,每個平面包含256一維行,每個行包含256個字位。一個字符在這個編碼空間的一個字位上進行編碼。每個字符均按照其組八位(G八位)、平面八位(P八位)、行八位(R八位)、字位八位(C八位)安排在UCS字符集中。為此,UCS規定了下表2-1所示的平面中的圖形字符和它們的代碼表示,平面類型包括基本多文種平面(BMP)、輔助多文種平面(SMP)、輔助表意文字平面(SIP)和輔助特殊用途平面(SSP)。(注意:在ISO/IEC 10646新版標準中又增加了三級表意文字平面(TIP))
圖 2-1-1:UCS的編碼結構示意
圖 2-1-2:UCS的代碼空間示意
圖 2-1-3:UCS的00組的布局結構示意
表 2-1:UCS規定的平面類型
UCS提供了4種字符編碼表示形式,即:雙八位BMP形式(UCS-2)、肆八位正則形式(UCS-4)、UTF-16形式和UTF-8形式。對于源自GB/T 1988(ISO/IEC 646)的字匯的字符(ASCII 字符)是它們在原編碼(7位編碼)中進行簡單的加零擴充而進行編碼的,因次,當用8位、16位或32位整數表示時,其編碼表示具有相等的整數值。
2、關于基本多文種平面(BMP)
可是,四字節的字符編碼太浪費存儲空間了。比較實際的做法是,在UCS編碼空間中,把第1和第2字節均為“0”的一個子空間,稱為基本多文種平面BMP(即00組00平面),作為它的子集來使用,記作UCS-2(-2表示雙字節編碼)。該平面可被用作雙八位編碼字符集。注意,UCS-2只包含BMP字匯,因此它與UCS-4、UTF-16和UTF-8不能完全互操作。在符合雙八位BMP形式(UCS-2)的編碼字符數據元素內,BMP平面中的一個字符應有行八位(R八位)和字位八位(C八位)。
3、肆八位正則形式(UCS-4)-輔助平面
輔助平面是指除00組00平面(BMP)以外的其它平面,即指00組01平面到FF平面(各平面的安排見表2-1)。其中,01到10平面中的每個代碼位置都可以唯一的映射到UTF-16形式的肆八位序列,這種形式與UCS-2的雙八位BMP形式兼容。11到FF平面和其它組的所有平面留作后續標準化使用。輔助平面的字符均采用肆八位正則形式(UCS-4),即每一個字符是由組八位、平面八位、行八位和字位八位所組成。
4、UTF-16形式(00組16個平面的轉換格式)
UTF-16 (UCS Transformation Form-16)提供了一百多萬個UCS-4 圖形字符的編碼表示形式,這種形式與UCS-2的雙八位BMP 形式兼容。這樣就使得UCS-4 的字符可以與UCS-2 編碼的字符數據共存。在UTF-16中,BMP 字匯中的每個圖形字符都保留其UCS-2 的編碼表示形式。此外,00組16 個平面(1 048 576個碼位)的某一連續區域中任一字符的編碼由一對RC 元素(行八位和字位八位)組成,而每個這樣的RC 元素對應于BMP 中8 行(2 048個碼位)的某個連續區域中的一個字位。這些代碼位置留給本編碼表示形式使用,不得用于其他目的。UTF-16的相關規定詳見下表2-4;具體轉換要求詳見GB/T 13000的附錄C。
表 2-4:UTF-16的相關規定
5、UTF-8形式
UTF-8是另外一種能對所有UCS 字符編碼的表示形式。它可用于在某些通信系統上傳送文本數據,而這些通信系統假定00 到7F 范圍內的單八位符合GB/T 11383 的定義,其中包括符合GB/T 2311 的8 位結構的C0控制功能集。UTF-8 還避免使用那些敏感的八位值,這些值在應用廣泛的文件處理系統中對文件名字符串進行解析時具有特殊的含義。UCS 字符的UTF-8 編碼表示中,八位的個數是1到6;第一個八位的值指明該編碼表示形式中八位的個數。下表2-5-1給出了UTF-8的特點;具體轉換要求詳見GB/T 13000的附錄D。
表 2-5-1:UTF-8的特點
為了與目前大量使用的基于ISO/IEC 2022的單八位系統保持向下兼容,同時避免與數據通信中使用的控制碼發生沖突,UCS在實現時可以將雙字節代碼變換為可變長代碼,最常用的就是UTF-8形式,它按照下表2-5-2給出的規則,把雙字節的UCS-2編碼轉換為單字節、雙字節或三字節和四字節的UTF-8編碼。
表 2-5-2:UCS-2編碼到UTF-8編碼的部分轉換規則
從表中可以看出,標準ASCII 字符仍以單字節代碼(00H~7FH)表示,其他字符如CJK漢字和擴充的拉丁字母、音節文字、標點符號等,需要使用雙字節、三字節或四字節代碼表示。這樣,既保持了與傳統ASCII 文本兼容,避免了與數據通信中控制碼的沖突,又實現了各種字符集的統一編碼。目前,大多數UCS編碼都是以UTF-8編碼形式實現的。
三、UCS與Unicode、GB 18030字符集間的關系
Unicode字符集是當初美國的一些IT公司,在1987年開始研究制定的、也是旨在對世界各國文件進行統一編碼的一種字符集規范標準。剛開始其研制思路(主要是編碼技術)有些不同,但鑒于ISO的UCS編碼字符集其技術上更為優越,后來兩者進行了融合,并一直保持著協調關系,同步發展,但各自發布著自己的標準文本。事實上,現在都把兩者統稱為UCS/Unicode字符集。
由我國自主研究制定的中文字符集標準GB 18030,在編碼技術上是支持UCS/Unicode字符集要求的,只是GB 18030結合我國文字的實際情況,只收錄了中文字符,包括漢字(含CJK統一漢字)、我國少數民族文字(近十種)和相應圖形符號字符等。