ISO/IEC 2022

ISO 2022,全稱ISO/IEC 2022,由國際標準化組織(ISO)及國際電工委員會(IEC)聯合制定,是一個使用7或8位元編碼表示各種語言文字的通用技術規範。特別以東亞語言:漢語文字日語文字朝鮮文字的編碼方法著稱。

ISO 2022等同於歐洲標準組織(ECMA)ECMA-35中國國標GB 2312、日本工業規格JIS X 0202(舊稱JIS C 6228)及韓國工業規格KS X 1004(舊稱KS C 5620)均遵從ISO 2022。

引言

 
Mozilla瀏覽器支援ISO 2022編碼

早期電腦的字元編碼基本上都是6位。所以早期電腦的整形的字長一般是6的倍數,如18位元、24位元、36位元等。1963年公佈的ASCII碼是第一個得到廣泛採用的7位字元編碼。這時的通訊領域的協定採用了第8位元做校驗糾錯用途。但是,對於電腦主記憶體來說,校驗糾錯變得不是必要。因此8位元字元編碼逐漸出現,用來表示比ASCII碼更多的字元。為此,1971年公佈的ECMA-35標準,用來規定各種7位或8位元字元編碼應當遵從的共同規則。隨後ECMA-35被採納為ISO 2022.

英語可用7位編碼儲存,而其他使用拉丁字母希臘字母西里爾字母希伯來字母等的語文,由於只使用數十個字母,傳統上均使用8位元編碼的ISO/IEC 8859標準來表示。但由於漢語、日語及韓語字數眾多,無法用單一個8位元字元來表達,故需要多於一個位元組來代表一個字。於是,ISO 2022就設計出來讓漢語、日語及韓語可以使用數個7位編碼的字元來示。

ISO 2022用來:

  • 在一種字元編碼下表示屬於多個字元集的字元;
  • 表示大字元集;
  • 相容7位元信道,即使是8位元編碼字元集。

ISO 2022使用「跳脫符串」(Escape sequence)指出隨後的字元屬於哪個字元集。這些字元集在ISO登記,並遵循ISO 2022標準規定的模式。跳脫符串由1個「ESC」字元(0x1B),再由兩至三個字串組成。此標記代表它後面的字元,屬於下表字元集的文字。對於一個字元集,如果上下文可以判明是哪種字元集,也可以不通過跳脫序列來明確指出是哪種字元集。實際上,ISO-8859-1就宣佈不需要定義它的跳脫序列。

ISO 2022的主要內容

ISO 2022用於相容當時的7位元寬的通訊協定/通訊裝置。對於7位元寬的編碼空間,0x00-0x1F保留給控制字元,0x20-0x7F用來表示圖形字元(printing/"graphic" characters)。因此,在1個7位元的字元編碼空間,圖形字元總計為94個(由於空格符佔用了0x20碼位、Del符佔用了0x7F碼位)或者96個。對於雙位元組的7位元編碼空間,圖形字元可以有94 x 94即8836個。對於三位元組的7位元編碼空間,圖形字元可以有94×94×94即830584個(雖然沒有三位元組字元集向ISO登記)。1970年代至1980年代,中文、日文、韓文的字元集漢字編碼數量基本上在這個範圍內。對於雙位元組編碼的字元的每個code point,日文譯作區點,中文譯作碼位;area在中日文均譯作「區」,point在日文譯作「點」,在中文譯作「位」。因此,GB2312及其相關字元集國標,採用了「區位碼」。

ISO 2022規定字元集的控制字元可分為兩塊:C0,C1; 列印(圖形)字元分為四塊:G0,G1,G2,G3。對於7位元編碼, 位元組值0x00-0x1F保留給C0控制字元塊;位元組值0x20-0x7F用於G0, G1, G2, G3字元塊。對於單位元組編碼的字元集,1個列印(圖形)字元塊可包含94個或96個字元;對於雙位元組編碼的字元集,1個列印(圖形)字元塊可包含94 x 94個字元。使用控制符的跳脫序列來表示在G0,G1,G2,G3之間的切換。

對於遵從ISO 2022的8位元編碼字元集,也是按照上述7位元編碼原則設計的編碼方案。這種8位元編碼字元集很容易相容當時的7位元寬的通訊協定/通訊裝置。8位元字元編碼時,0x00-0x1F表示C0或稱CL區(L是left縮寫,因為其在字元表的左側),0x80-0x9F表示C1或稱CR(R是Right縮寫,因為其在字元表的右側)。0x20-0x7F表示G0(稱GL區),0xA0-0xFF(稱GR區)可表示G1, G2, G3。

ISO-8859-X字元集是特定的把ISO-2022的若干成分組合起來的字元集。這些成分包括:

  • 低階控制字元(C0)
  • US-ASCII字元集(GL)
  • 高端控制字元(C1)
  • 高端字元(GR)是特定於每個ISO-8859-X變種。例如ISO-8859-1是由ISO-IR-1, ISO-IR-6, ISO-IR-77, ISO-IR-100 組成。

對於GB 2312,是8位元雙位元組編碼。其漢字編碼空間為94 x 94,即有94個區,每個區有94個位(用來編碼字元)。實際使用了16-55區編碼一級漢字,56-87區編碼二級漢字。這些漢字均放在了G1字元塊區。這種區位碼方案是GB 2312的邏輯設計。其具體的字元編碼方案(Character Encoding Scheme):位元組值在0x00-0x7F,為單位元組表示一個字元,構成了C0、G0區,與ASCII碼相容。因此,GB 2312是單、雙位元組混合編碼。

GBK編碼作為簡體中文Windows作業系統的預設的語言locale設置,GBK編碼雖然完全向下相容GB 2312,但GBK突破了ISO 2022中GR區域的字數的94²=8,836個字的限制。GBK編碼的第一位元組向 81–FE (126個選項,佔用了C1區) 、第二位元組向 40–FE (191個選項,佔用了GL區、C1區) 進行擴充。隨後的GB 18030在完全相容GBK的基礎上增加了4位元組的編碼,如果第二位元組的值在0x30-0x3F範圍,則隨後的兩個位元組一起組成1個4位元組編碼的字元。

CNS 11643-1992,至1992年作為雙位元組編碼包含了7個字面、48,027字。其具體的字元編碼方案是採用控制字元跳脫序列,在不同的字面之間切換。

編碼結構

ISO/IEC 2022編碼在字元碼值與顯示的字元之間給出了兩層對映。跳脫序列允許任何大的登記的圖形字元集指代於四個工作集之一:即G0到G3,以及更短的控制序列指出被使用"invoked"的工作集以解釋流中的位元組。

7位元ASCII圖形字元的範圍(0x20–0x7F),是在字元編碼表的左側,稱作"GL"碼(表示"graphics left"),"高位ASCII"碼的範圍(0xA0–0xFF), 被稱作"GR"碼("graphics right")。

預設, GL碼指代G0字元, GR碼指代G1字元,但這可被控制碼或早先的協定修改:

縮寫. 名字 效果
0x0F SI
LS0
Shift In
Locking shift zero
GL編碼G0從現在開始
0x0E SO
LS1
Shift Out
Locking shift one
GL 編碼G1從現在開始
ESC 0x6E (n) LS2 Locking shift two GL 編碼G2從現在開始
ESC 0x6F (o) LS3 Locking shift three GL 編碼G3從現在開始
0x8E
ESC 0x4E
(N)
SS2 Single shift two GL 編碼G2僅用於下一個字元
0x8F
ESC 0x4F
(O)
SS3 Single shift three GL 編碼G3僅用於下一個字元
ESC 0x7E (~) LS1R Locking shift one right GR 編碼G1從現在開始
ESC 0x7D (}) LS2R Locking shift two right GR 編碼G2從現在開始
ESC 0x7C (|) LS3R Locking shift three right GR 編碼G3從現在開始

四個工作集的每個可表示94個字元或94n字元。此外,G1到G3可表示96或96n個字元。當後者被用在GL區域,空格字元與delete字元(碼值0x20與0x7F)不可用。

還有一些罕用的特性可切換控制字元集,這是單層查詢:the 0x00–0x1F範圍是C0控制字元集,0x80–0x9F範圍是C1控制字元集,跳脫序列可以切換不同的選擇。要求任何C0字元集包含ESC字元出現在碼位0x1B。

在上述SS2與SS3例子中,C1控制字元集中的單個控制字元可被7位元編碼用於序列ESC 0x40 (@)ESC 0x5F (_)。額外的控制功能可用於範圍ESC 0x60 (`)ESC 0x7E (~)

跳脫序列指代字元集採取這樣的形式ESC I [I...] F, 其中有一個或多個中間的I位元組來自範圍0x20–0x2F, 一個最後的F位元組來自0x40–0x7F。(範圍0x30–0x3F被保留用於私用F位元組)。 I位元組辨識字元集類型與被指代的工作集,F位元組辨識字元集自身。

碼值 十六進制 縮寫 名字 效果
ESC ! F 1B 21 F CZD C0-designate F選擇一個C0控制字元集來使用.
ESC " F 1B 22 F C1D C1-designate F選擇一個C1控制字元集來使用.
ESC % F 1B 25 F DOCS Designate other coding system F選擇一個8-bit編碼;使用ESC % @返回到ISO/IEC 2022.
ESC % / F 1B 25 2F F DOCS Designate other coding system F選擇一個8-bit編碼;沒有標準方法返回。
ESC & F 1B 26 F IRR Identify revised registration F被調整到範圍1-63, 指出立即跟隨的登記的哪一個修改版被需要,使得老系統知道自身過時了。
ESC ( F 1B 28 F GZD4 G0-designate 94-set F選擇一個94個碼位的字元集被用於G0.
ESC ) F 1B 29 F G1D4 G1-designate 94-set F選擇一個94個碼位的字元集被用於G1.
ESC * F 1B 2A F G2D4 G2-designate 94-set F選擇一個94個碼位的字元集被用於G2.
ESC + F 1B 2B F G3D4 G3-designate 94-set F選擇一個94個碼位的字元集被用於G3.
ESC - F 1B 2D F G1D6 G1-designate 96-set F選擇一個96個碼位的字元集被用於G1.
ESC . F 1B 2E F G2D6 G2-designate 96-set F選擇一個96個碼位的字元集被用於G2.
ESC / F 1B 2F F G3D6 G3-designate 96-set F選擇一個96個碼位的字元集被用於G3.
ESC $ F
ESC $ ( F
1B 24 F
1B 24 28 F
GZDM4 G0-designate multibyte 94-set F選擇一個94n個碼位的字元集被用於G0.
ESC $ ) F 1B 24 29 F G1DM4 G1-designate multibyte 94-set F選擇一個94n個碼位的字元集被用於G1.
ESC $ * F 1B 24 2A F G2DM4 G2-designate multibyte 94-set F選擇一個94n個碼位的字元集被用於G2.
ESC $ + F 1B 24 2B F G3DM4 G3-designate multibyte 94-set F選擇一個94n個碼位的字元集被用於G3.
ESC $ - F 1B 24 2D F G1DM6 G1-designate multibyte 96-set F選擇一個96n個碼位的字元集被用於G1.
ESC $ . F 1B 24 2E F G2DM6 G2-designate multibyte 96-set F選擇一個96n-個碼位的字元集被用於G2.
ESC $ / F 1B 24 2F F G3DM6 G3-designate multibyte 96-set F選擇一個96n個碼位的字元集被用於G3.

F位元組的登記對於不同類型的字元集是獨立的。使用ESC ( AESC + A指派的94個字元的圖形字元集不相關於使用ESC - AESC / A指派的96個字元的圖形字元集。二者也不相干於使用ESC $ ( AESC $ + A指派的94n個字元的字元集,等等。

C0與C1控制字元集也是獨立的。C0控制字元集用ESC ! A指代,與用ESC " A指代的控制字元集C1無關。

此外,I位元組可增加到F位元組前面以擴充F位元組範圍。這僅用於94個字元的字元集,它的碼的形式已經使用了ESC ( ! F

遵從ISO 2022的字元集

以ISO 2022標準來編碼的字集包括:

  • ISO-2022-JP - 日語文字
  • ISO-2022-JP-1 - 於ISO-2022-JP的基礎上,加上以下一組逃逸字串
  • ISO-2022-JP-2 - 於ISO-2022-JP-1的基礎上,加上以下四組逃逸字串,提供多語言支援
    • ESC $ A 轉為GB 2312-1980(簡體中文)
    • ESC $ ( C 轉為KS X 1001-1992(朝鮮文)
    • ESC . A 轉為ISO 8859-1(西歐拉丁字母)
    • ESC . F 轉為ISO 8859-7(希臘字母)
  • ISO-2022-JP-3 - 於ISO-2022-JP的基礎上,加上以下兩組逃逸字串
    • ESC $ ( O 轉為JIS X 0213-2000第一字面
    • ESC $ ( P 轉為JIS X 0213-2000第二字面
  • ISO-2022-JP-2004 - 於ISO-2022-JP-3的基礎上,加上以下一組逃逸字串
    • ESC $ ( Q 轉為JIS X 0213-2004第一字面
  • ISO-2022-CN - 中文
  • ISO-2022-CN-EXT - 於ISO-2022-CN的基礎上,加上以下六組逃逸字串
    • ESC $ ) E 轉為ISO-IR-165
    • ESC $ + I 轉為CNS 11643-1992第三字面
    • ESC $ + J 轉為CNS 11643-1992第四字面
    • ESC $ + K 轉為CNS 11643-1992第五字面
    • ESC $ + L 轉為CNS 11643-1992第六字面
    • ESC $ + M 轉為CNS 11643-1992第七字面

參看

參考文獻

  • 小林劍,(1999年). CJKV Information Processing. First Edition. O'Reilly and Associates, Inc. ISBN 1-56592-224-7;中文版,鄭褚璋譯,(2002年)中日韓越資訊處理 第一版,台北市,美商歐萊禮股份有限公司。 ISBN 986-7794-03-6

外部連結