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

外部連結

編輯