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字符，但這可被控制碼或早先的協議修改： 
四個工作集的每個可表示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字節辨識字符集自身。 
F字節的登記對於不同類型的字符集是獨立的。使用ESC ( A到ESC + A指派的94個字符的圖形字符集不相關於使用ESC - A到ESC / A指派的96個字符的圖形字符集。二者也不相干於使用ESC $ ( A 到ESC $ + A指派的94n個字符的字符集，等等。
C0與C1控制字符集也是獨立的。C0控制字符集用ESC ! A指代，與用ESC " A指代的控制字符集C1無關。 
此外，I字節可增加到F字節前面以擴展F字節範圍。這僅用於94個字符的字符集，它的碼的形式已經使用了ESC ( ! F。

**遵從ISO 2022的字符集**
以ISO 2022標準來編碼的字集包括：
*highlight=no - 日語文字
**ESC ( B  轉為ASCII
**ESC ( J  轉為JIS X 0201-1976
**ESC $ @  轉為JIS X 0208-1978
**ESC $ B  轉為JIS X 0208-1983
*highlight=no - 於ISO-2022-JP的基礎上，加上以下一組逃逸字串
**ESC $ ( D 轉為JIS X 0212-1990
*highlight=no - 於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（希臘字母）
*highlight=no - 於ISO-2022-JP的基礎上，加上以下兩組逃逸字串
**ESC $ ( O 轉為JIS X 0213-2000第一字面
**ESC $ ( P 轉為JIS X 0213-2000第二字面
*highlight=no - 於ISO-2022-JP-3的基礎上，加上以下一組逃逸字串
**ESC $ ( Q 轉為JIS X 0213-2004第一字面
*highlight=no - 朝鮮文
**ESC $ ) C 轉為KS X 1001-1992
*highlight=no - 中文
**ESC $ ) A 轉為GB 2312-1980
**ESC $ ) G 轉為CNS 11643-1992第一字面
**ESC $ * H 轉為CNS 11643-1992第二字面
*highlight=no - 於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第七字面

**參看**
 EUC- 國際標準化組織 (ISO)

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

**外部鏈接**
  國際標準化組織date=20080807163442 -  ECMA-35date=20041209143845 -  中國國家標準（中華民國）CNS 7654-  International Register of Coded Character Sets to be Used with Escape Sequencesdate=20041204045412 - RFC 1468, ISO-2022-JP的規格- RFC 2237, ISO-2022-JP-1的規格- RFC 1554, ISO-2022-JP-2的規格- RFC 1922, ISO-2022-CN及ISO-2022-CN-EXT的規格- RFC 1557, ISO-2022-KR的規格-  History of Character Codes in North America, Europe, and East Asia-  CJK.INF: a document on encoding Chinese, Japanese, and Korean (CJK) languages, including a discussion of the various variants of ISO 2022。可透過  HTTPdate=20041208121632 瀏覽。