| 言語 | 様々な。 |
|---|---|
| 標準 | |
| 分類 | 状態を持つ符号化システム(状態を持たない事前設定済みサブセットを含む) |
| 変換/エンコード | US-ASCII、および実装によっては: |
| 後継者 | ISO/IEC 10646 ( Unicode ) |
| その他の関連エンコーディング | 状態を持つ部分集合: 事前設定済みバージョン: |
ISO/IEC 2022情報技術—文字コード構造及び拡張技術は、文字符号化の分野におけるISO / IEC規格です。これは、 ECMA規格ECMA - 35 [ 1 ] [ 2 ] 、 ANSI規格ANSI X3.41 [ 3 ]、および日本工業規格JIS X 0202と同等です。1971 年に制定され、1994 年に最後に改訂されました。[ 4 ]
ISO 2022 は、文字エンコーディングが準拠できる一般的な構造を規定しており、特定のバイト範囲 ( 0x 00–1F および 0x7F–9F) を、グラフィカル文字ではなく、フォーマットやインバンド命令 (テキスト端末の改行やフォーマット命令など) 用の非印刷制御コード[ 5 ]に割り当てています。また、 ESC制御コードで始まる複数バイトのシーケンスであるエスケープシーケンスの構文も規定しており、これもインバンド命令に使用できます。[ 6 ] ISO 2022 で使用するために設計された特定の制御コードとエスケープシーケンスのセットには、 ANSI.SYSや端末エミュレータで実装されているISO/IEC 6429が含まれます。
ISO 2022自体も、異なるコード化された文字セット(たとえば、ASCIIと日本語のJIS X 0208の間)を切り替えるために使用できる特定の制御コードとエスケープシーケンスを定義しており、単一のドキュメントで複数の文字セットを使用できるようにし、[ 7 ]それらを単一のステートフルエンコーディングに効果的に組み合わせています( Unicodeの登場以来、重要性が低下した機能)。これは、8ビット環境と7ビット環境( 8BITMIMEなしの電子メールなど、1バイトで7ビットしか使用できない環境)の両方で使用できるように設計されています。[ 8 ]
ASCII 文字セットはISO 基本ラテン文字(英語のアルファベットに相当) をサポートしており、追加の文字を使用する言語や、まったく異なる表記体系を使用する言語には十分なサポートを提供していません。ギリシャ語、キリル文字、アラビア語、ヘブライ語など、文字数が比較的少ない他の表記体系、および発音記号や ISO 基本ラテン文字にない文字を使用するラテン文字の形式は、これまでパーソナル コンピュータ上で、異なる 8ビット、1 バイトの拡張ASCIIエンコーディングで表現されてきました。これは、最上位ビットが 0 の場合(16 進数で表すとバイト 0x00~7F ) はASCIIに続き、最上位ビットが 1 の場合 (バイト 0x80~FF) には追加の文字が含まれます。ISO 8859シリーズなど一部のコードはISO 2022 に準拠していますが[ 9 ] [ 10 ] 、 DOS コード ページ 437など他のコードは準拠していません。これは通常、バイト 0x80~9F を制御コード用に予約していないためです。
特定の東アジア言語、特に中国語、日本語、韓国語(総称して「CJK」)は、1バイトで表現できる最大文字数256文字をはるかに超える文字を使用して記述され、当初は言語固有の2バイトエンコーディングまたは可変幅エンコーディングでコンピュータに表現されていました。これらのうちいくつか(簡体字中国語エンコーディングGB 2312など)はISO 2022に準拠していますが、その他(繁体字中国語エンコーディングBig5など)は準拠していません。ISO 2022の制御コードは、グラフィック文字に使用されるバイト数に関係なく、常に1バイトで表現されます。文字セットを切り替えるためにISO 2022メカニズムを使用する7ビット環境で使用されるCJKエンコーディングは、「ISO-2022-」で始まる名前が付けられることが多く、最も有名なのはISO-2022-JPですが、 EUC-JPなどの他のCJKエンコーディングもISO 2022メカニズムを使用しています。[ 11 ] [ 12 ]
Unicodeの最初の256コードポイントはISO 8859-1から取得されているため、UnicodeはISO 2022のC0およびC1制御コードの概念を継承していますが、 ISO 2022制御コード以外にも他の非印刷文字を追加しています。しかし、 UTF-8などのUnicode変換フォーマットは、一般的にISO 2022の構造からさまざまな点で逸脱しています。
ただし、ISO 2022 エスケープシーケンスは、「 ISO 2022 とは異なる符号化システム」として UTF-8 と切り替えるために存在し、[ 13 ] xtermなどの特定の端末エミュレータでサポートされています。[ 14 ]
ISO/IEC 2022では、以下の事項が規定されています。
特定の実装では、標準のすべてを実装する必要はありません。適合レベルとサポートされる文字セットは、実装によって定義されます。 ISO/IEC 2022 標準で定義されているメカニズムの多くはあまり使用されていませんが、確立されたエンコーディングのいくつかは、ISO/IEC 2022 システムのサブセットに基づいています。[ 19 ]特に、ISO/IEC 2022 メカニズムを使用する 7 ビット エンコーディング システムには、主に日本語の電子メールで使用されているISO-2022-JP (またはJIS エンコーディング) があります。 ISO/IEC 2022 に準拠する 8 ビット エンコーディング システムには、 ISO/IEC 4873 (ECMA-43) があり、これはさらにISO/IEC 8859に準拠しています。[ 9 ] [ 10 ]および東アジア言語で使用されるExtended Unix Code。[ 11 ] ISO 2022 のより特殊なアプリケーションには、 MARC 21図書館レコードで使用されるMARC-8エンコーディング システムがあります。[ 3 ]
特定の文字セットやエンコーディングに切り替えるためのエスケープシーケンスは、ISO-IRレジストリに登録されています(ただし、ベンダーが定義するプライベート使用専用のもの、またはARIB STD-B24などのプロトコル仕様で定義されるものを除く)。これらのエスケープシーケンスは、規格内で定義されたパターンに従います。これらのエスケープシーケンスを使用する文字エンコーディングでは、データの正しい解釈が以前に検出されたエスケープシーケンスに依存するため、データは順方向に順次処理される必要があります。
ISO-2022-JPなどの特定のプロファイルでは、行末の前に現在の文字セットをUS-ASCIIにリセットするなど、追加の条件が課される場合があります。さらに、特定のISO-2022ベースのエンコーディングで許可または要求され、特定の国別文字セットの使用が規定されている場合は、国別文字セットを宣言するエスケープシーケンスを省略できます。例えば、ISO-8859-1では、定義エスケープシーケンスは不要と規定されています。
大規模な文字セットを表現するために、ISO/IEC 2022 は、7ビットの文字表現では通常 94 個のグラフィック (印刷可能) 文字 (スペースと 33 個の制御文字に加えて) を表現できるという ISO/IEC 646 の特性に基づいています。C0 制御コード (狭義に定義) のみを除外すれば、これを 96 文字に拡張できます。したがって、2 バイトを使用すると最大 8,836 (94×94) 文字を表現でき、3 バイトを使用すると最大 830,584 (94×94×94) 文字を表現できます。標準では定義されていますが、登録されている文字セットで 3 バイトを使用するものはありません (ただし、EUC-TWの未登録の G2 と、同様に未登録のCCCII は3 バイトを使用しています)。
2 バイト文字セットの場合、各文字のコード ポイントは通常、いわゆる行セルまたはクテン[ a ]形式で指定され、これは 1 から 94 までの 2 つの数値で構成され、ゾーン内のその文字の行[ b ]とセル[ c ]を指定します。3 バイト セットの場合は、先頭にプレーン[ d ]番号が追加されます。 [ 20 ]エスケープ シーケンスは、どの文字セットが使用されているかだけでなく、そのセットがシングル バイトかマルチ バイトか (マルチ バイトの場合は使用するバイト数は示さない)、および各バイトが 94 または 96 の許可値を持つかどうかも宣言します。
ISO/IEC 2022 コーディングでは、文字コードと表示文字間の 2 層のマッピングが規定されています。エスケープシーケンスにより、多数のグラフィック文字セットのレジストリから任意の文字を G0 から G3 までの 4 つのワーキング セットのいずれかに「指定」することができ[ 21 ] 、より短い制御シーケンスによって、ストリーム内のバイトを解釈するために「呼び出される」ワーキング セットが指定されます[ 22 ] 。
バイト値(「ビットの組み合わせ」)のエンコードは、多くの場合、列行表記で表されます。この表記では、00~15 の範囲の 2 つの 10 進数(それぞれが 1 つの 16 進数に対応)[ 23 ]がスラッシュで区切られます。[ 24 ]したがって、たとえば、コード 2/0 (0x20) から 2/15 (0x2F) までを「列 02」と呼ぶことができます。これは、ISO/IEC 2022 / ECMA-35 規格自体で使用されている表記です。[ 25 ]この記事でよく使用されているように、 16 進数を使用して、または対応する ASCII 文字を使用して、他の場所で記述することもできます。 [ 26 ]ただし、エスケープ シーケンスは実際にはバイト値で定義されており、そのバイト値に割り当てられたグラフィックは、制御シーケンスに影響を与えることなく変更できます。
7 ビット ASCII グラフィック範囲 (16 進数 0x20–0x7F) のバイト値は、文字コード テーブルの左側にあるため、「GL」コード(「GL」は「グラフィック左」の略)と呼ばれ、利用可能な場合 (つまり 8 ビット環境の場合) の「高 ASCII」範囲 (0xA0–0xFF) のバイトは、「GR」コード(「グラフィック右」)と呼ばれます。[ 5 ]「CL」(0x00–0x1F) と「CR」(0x80–0x9F) という用語は制御範囲に対して定義されていますが、CL 範囲は常にプライマリ (C0) コントロールを呼び出し、CR 範囲は常にセカンダリ (C1) コントロールを呼び出すか、または使用されません。[ 5 ]
削除文字DEL (0x7F)、エスケープ文字ESC (0x1B)、スペース文字SP (0x20) は「固定」コード化文字として指定されており[ 27 ]、GL 上で G0 が呼び出されると、指定されている文字セットに関係なく常に使用できます。これらの文字はグラフィカル文字セットには含まれない場合があります。ただし、他のサイズや種類の空白文字は含まれる場合があります。[ 28 ]
ESC(エスケープ)文字を使用したシーケンスは、 の形式をとります。ここで、ESC 文字の後に、0x20~0x2F の範囲の 0 個以上の中間バイト[ 29 ] ( I ) と、 0x30~0x7E の範囲の1 バイトの最終バイト[ 30 ] ( F ) が続きます。 [ 31 ]ESC [I...] F
最初のIバイト、またはその不在によって、エスケープ シーケンスの種類が決まります。たとえば、ワーキング セットを指定したり、単一の制御機能を示したりする場合があります。すべてのタイプのエスケープ シーケンスにおいて、 0x30~0x3F の範囲のFバイトは、当事者間の事前の合意によって定義された未登録のプライベート ユース用に予約されています。[ 32 ]
一部のセットの制御関数は、エスケープシーケンス自体に続くバイトをさらに使用する場合があります。たとえば、エスケープシーケンスを使用して表現できるISO 6429制御関数「制御シーケンス導入部」の後には、0x30~0x3Fの範囲の0個以上のバイト、次に0x20~0x2Fの範囲の0個以上のバイト、次に0x40~0x7Eの範囲の1バイトが続き、このシーケンス全体が「制御シーケンス」と呼ばれます。[ 33 ]
4つのワーキングセットG0~G3はそれぞれ、94文字セットまたは94n文字のマルチバイトセットのいずれかです。さらに、 G1~G3は96文字セットまたは96n文字セットのいずれかです。
96文字または96n文字セットでは、 GL呼び出しの場合はバイト0x20から0x7Fまで、GR呼び出しの場合はバイト0xA0から0xFFまでがセットに割り当てられ、セットで使用できます。94文字または94n文字セットでは、バイト0x20と0x7Fは使用されません。[ 34 ] GL領域で96文字または96n文字セットが呼び出されると、 GLで94文字または94n文字セット(G0セットなど)が呼び出されるまで、スペース文字と削除文字(コード0x20と0x7F)は使用できません。[ 5 ] 96文字セットをG0に指定することはできません。
96文字セットとして登録されたからといって、必ずしも0x20/A0バイトと0x7F/FFバイトが実際にそのセットに割り当てられるとは限りません。96セットとして登録されているものの、これらのバイトを使用しないグラフィック文字セットの例としては、IS 434のG1セット[ 35 ]、ISO/IEC 10367のボックス描画セット[ 36 ]、およびISO-IR-164( ISO-8859-8のG1セットのサブセットで、文字のみを含み、CCITTで使用されている) [ 37 ]などがあります。
文字は、該当するグラフィック セットで別途指定されていない限り、結合文字ではなく、間隔文字であると想定されます。[ 38 ] ISO 2022 / ECMA-35 では、バックスペースとキャリッジ リターン制御文字を、本来は間隔文字である文字を結合する手段として、またCSI シーケンス「グラフィック文字結合」(GCC) [ 38 ] ( CSI 0x20 (SP) 0x5F (_)) としても認識しています。[ 39 ]
バックスペースとキャリッジリターンをこのように使用することは、ISO/IEC 646では許可されていますが、ISO/IEC 4873 / ECMA-43 [ 40 ]およびISO/IEC 8859 [ 41 ] [ 42 ]では、グラフィカル文字のレパートリーが未定義のままになるという理由で禁止されています。ただし、ISO/IEC 4873 / ECMA-43 では、文字のシーケンスが同じままで、異なる意味の文字を形成するために重ねて表示するのではなく、単に 1 つのスペースに表示される場合に限り、GCC 関数の使用が許可されています。[ 43 ]
制御文字セットは、「プライマリ」または「セカンダリ」制御コードセットに分類され、[ 44 ]それぞれ「C0」および「C1」制御コードセットとも呼ばれます。[ 45 ]
C0制御セットは、0x1BにESC(エスケープ)制御文字を含まなければならない[ 46 ](ESCのみを含むC0セットはISO-IR-104として登録される)[ 47 ]のに対し、C1制御セットはエスケープ制御を一切含まない[ 34 ] 。したがって、これらは完全に別々の登録であり、C0セットはC0セットのみであり、C1セットはC1セットのみである[ 45 ] 。
ISO 6429 / ECMA-48 の C0 セットのコード、つまりASCII 制御コードが C0 セットに含まれている場合、それらは ISO 6429 / ECMA-48 の位置に含まれていなければなりません。[ 46 ] ISO 6429 / ECMA-48 に含まれる 10 文字 (SOH、STX、ETX、EOT、ENQ、ACK、DLE、NAK、SYN、ETB) 以外の伝送制御文字を C0 セットに含めること、[ 48 ]または、これらの 10 文字のいずれかを C1 セットに含めることも、ISO/IEC 2022 / ECMA-35 規格で禁止されています。[ 46 ] [ 34 ]
C0 制御セットは CL 範囲 0x00 ~ 0x1F で呼び出されますが、[ 49 ] C1 制御機能は CR 範囲 0x80 ~ 0x9F (8 ビット環境の場合) またはエスケープシーケンスを使用して (7 ビットまたは 8 ビット環境の場合) 呼び出されますが、[ 44 ]両方を使用することはできません。どの C1 呼び出しスタイルを使用するかは、コードバージョンの定義で指定する必要があります。[ 50 ]例えば、ISO/IEC 4873 では、使用する C1 制御 (SS2 および SS3) の CR バイトを指定しています。[ 51 ]必要に応じて、アナウンサーシーケンスを使用して、どの呼び出しを使用するかを通知できます。
後者の場合、C1制御コードセットの単一の制御関数は「タイプFe」エスケープシーケンスを使用して呼び出されます[ 34 ]。これは、ESC制御文字の後に列04または05(つまり、ESC 0x40 (@)からESC 0x5F (_))のバイトが続くことを意味します。[ 52 ]
ESC 0x60 (`)追加の制御機能は「タイプ Fs」エスケープシーケンス (から までの範囲) に割り当てられますESC 0x7E (~)。これらは、C0 または C1 の指定に依存するのではなく、永続的に割り当てられた意味を持ちます。[ 52 ] [ 53 ]制御機能をタイプ「Fs」シーケンスに登録するには、ISO/IEC JTC 1/SC 2の承認が必要です。[ 53 ]他の単一の制御機能は、タイプ「3Ft」エスケープシーケンス (から までの範囲) に登録できますが、[ 54 ]現在、「3Ft」シーケンスは割り当てられていません (2019 年現在)。[ 55 ]これらのうちいくつかは ECMA-35 (ISO 2022 / ANSI X3.41) で規定されており、その他は ECMA-48 (ISO 6429 / ANSI X3.64) で規定されています。[ 56 ] ECMA-48 では、これらを「独立制御機能」と呼んでいます。[ 57 ]ESC 0x23 (#) [I...] 0x40 (@)ESC 0x23 (#) [I...] 0x7E (~)
ESC 0x30 (0)タイプ「Fp」( ~ESC 0x3F (?))またはタイプ「3Fp」(~ )のエスケープシーケンスは、当事者間の事前合意により、単一のプライベート使用制御コード用に予約されています。[ 59 ] VT100などのDEC端末では、これらのタイプのシーケンスがいくつか使用されており、端末エミュレータでサポートされています。[ 14 ]ESC 0x23 (#) [I...] 0x30 (0)ESC 0x23 (#) [I...] 0x3F (?)
デフォルトでは、GL コードは G0 文字を指定し、GR コード (利用可能な場合) は G1 文字を指定します。これは、事前の合意により別途指定できます。各領域で呼び出されるセットは、以下の表に示すように、シフトと呼ばれる制御コードによって変更することもできます。[ 60 ]
8 ビット コードには G1 文字を指定する GR コードがあり、対応する 7 ビット コードではシフト インとシフト アウトを使用してセットを切り替えます (例: JIS X 0201 ) [ 61 ]。ただし、代わりに G2 文字を指定する GR コードがあり、対応する 7 ビット コードではシングル シフト コードを使用して 2 番目のセットにアクセスします (例: T.51 ) [ 62 ] 。
以下の表に示すコードは、ISO/IEC 6429に準拠した、これらの制御コードの最も一般的なエンコードです。LS2、LS3、LS1R、LS2R、LS3R シフトは単一の制御機能として登録され、常に以下のエスケープシーケンスとしてエンコードされます。[ 55 ]一方、その他のシフトは C0 または C1 制御コード セットの一部です (以下に示すように、SI (LS0) と SO (LS1) は C0 制御、SS2 と SS3 は C1 制御です)。つまり、指定されている制御セットによってコーディングと利用可能性が異なる可能性があります。機能を使用する場合は、指定された制御セットに存在する必要があります。[ 49 ] [ 50 ]上記のように、C1 制御自体はエスケープシーケンスまたは 8 ビット バイトを使用して表現できますが、両方を使用することはできません。
特定の制御コード セットでは、C0 制御コードとしてのシングル シフトの代替エンコーディングが利用可能です。たとえば、SS2 と SS3 は通常、T.51 [ 62 ]とT.61 [ 63 ]でそれぞれ 0x19 と 0x1D で使用できます。このコーディングは現在、SS2 と SS3 の 7 ビット シングル バイト表現を必要とするアプリケーションに対して ISO/IEC 2022 / ECMA-35 で推奨されており[ 64 ]、SS2 のみにも使用できます[ 65 ]。ただし、SS2 が 0x1C にある古いコード セットも存在し[ 66 ] [ 67 ] [ 68 ]、標準の以前の版でそのように言及されていました[ 69 ] 。以下に示すシングル シフトの 0x8E と 0x8F コーディングは、ISO/IEC 4873レベル 2 と 3で必須です[ 70 ]。
シングルシフトコードは、公式にはシフトコードとみなされ、それに応じて命名されていますが、必ずしもシフトと見なされるわけではなく、[ 12 ]ロックシフトコードとは異なり、エンコーダが現在アクティブなセットを状態として保持する必要がないため、単にプレフィックスバイト(つまり、マルチバイトシーケンスの最初のバイト)と見なされる場合もあります。 [ 11 ] 8 ビット環境では、シングルシフト領域として GL または GR のいずれかを使用できますが、両方を使用することはできません。これは、コードバージョンの定義で指定する必要があります。[ 73 ]例えば、ISO/IEC 4873では GL が指定されていますが、パックド EUCでは GR が指定されています。7 ビット環境では、シングルシフト領域として GL のみが使用されます。[ 75 ] [ 76 ]必要に応じて、どのシングルシフト領域が使用されているかをアナウンサーシーケンスを使用して通知することができます。
「ロッキングシフトゼロ」(LS0) と「ロッキングシフトワン」(LS1) という名称は、「シフトイン」(SI) と「シフトアウト」(SO) という名称と同じ C0 制御文字のペア (0x0F と 0x0E) を指します。ただし、規格では、これらが 8 ビット環境で使用される場合は LS0 と LS1 と呼び、7 ビット環境で使用される場合は SI と SO と呼びます。[ 60 ]
ISO/IEC 2022 / ECMA-35規格では、GLとGRの両方でG1、G2、またはG3を同時に呼び出すことは許可されているが、推奨はされていない。[ 77 ]
ISO国際登録簿(ISO-IR) には、ISO/IEC 2022 で使用するために登録されたグラフィック文字セット、制御コードセット、単一制御コードなどがリストされています。コードとセットを ISO-IR 登録簿に登録する手順は、ISO/IEC 2375で規定されています。各登録には、固有のエスケープシーケンスと、それを識別するための固有の登録エントリ番号が付与されます。[ 78 ] [ 79 ]例えば、簡体字中国語のCCITT文字セットはISO-IR-165として知られています。
ISO-IRレジストリへの符号化文字セットの登録は、ISO/IEC 2022非私用エスケープシーケンスに関連付けられた文字セットまたは制御機能を指定する文書を識別します。これは標準文書である可能性がありますが、登録によって新しいISO規格が作成されるわけではなく、ISOまたはIECがそれを国際規格として採用することを約束するものでもなく、ISOまたはIECがその文字をユニバーサル符号化文字セットに追加することを約束するものでもありません。[ 80 ]
ISO-IR に登録されたエスケープシーケンスは、SGML (ISO 8879)で数値文字参照に使用される文字セットを識別するために、正式な公開識別子(FPI) にカプセル化されて使用されます。たとえば、文字列はISO 646 -1983の国際参照バージョンを識別するために使用でき、 [ 81 ] HTML 4.01 仕様では Unicode を識別するために使用されています。 [ 82 ] FPIの 3 番目の要素に含まれるエスケープシーケンスのテキスト表現は、サポートされている文字セットの SGML 実装によって認識されます。[ 81 ]ISO 646-1983//CHARSET International Reference Version (IRV)//ESC 2/5 4/0ISO Registration Number 177//CHARSET ISO/IEC 10646-1:1993 UCS-4 with implementation level 3//ESC 2/5 2/15 4/6
文字セットを指定するエスケープシーケンスは の形式をとります。前述のとおり、中間 ( I ) バイトは 0x20~0x2F の範囲、最終 ( F ) バイトは 0x30~0x7E の範囲です。最初のIバイト (または、マルチバイト セットの場合は最初の 2 バイト) は、指定される文字セットの種類とワーキング セットを識別し、Fバイト (および追加のIバイト) は、ISO-IR レジスタ (または、プライベート ユースのエスケープシーケンスの場合は事前の合意) で割り当てられた文字セット自体を識別します。ESC I [I...] F
Fバイトの範囲を拡張するために、Fバイトの前に追加のIバイトを追加できます。これは現在、94 文字セットでのみ使用されており、その形式のコードが割り当てられています。[ 83 ]もう一方の極端な例として、マルチバイト 96 セットは登録されていないため、以下のシーケンスは厳密には理論上のものです。ESC ( ! F
他のエスケープシーケンスタイプと同様に、0x30~0x3F の範囲はプライベート使用のFバイト用に予約されています[ 32 ]。この場合、プライベート使用の文字セット定義用です ( ARIB STD-B24 [ 84 ]やMARC-8 [ 3 ]などのプロトコルで定義された未登録のセット、またはDEC Special Graphicsなどのベンダー固有のセットが含まれる場合があります)。[ 85 ]ただし、グラフィカルセット指定シーケンスでは、2 番目のIバイト (シングルバイトセットの場合) または 3 番目のIバイト (ダブルバイトセットの場合) が 0x20 (スペース) の場合、指定されるセットは、事前合意により定義された「動的に再定義可能な文字セット」(DRCS)であり[ 86 ] 、これもプライベート使用とみなされます。[ 32 ]グラフィカルセットが DRCS とみなされるということは、抽象的な文字のセットではなく、正確なグリフのフォントを表していることを意味します。[ 87 ] DRCS セットと関連フォントの送信、割り当て、管理方法は ISO/IEC 2022 / ECMA-35 自体では規定されていませんが、Fバイト 0x40 ( @) から順に割り当てていくことを推奨しています。[ 88 ]ただし、DRCS フォントの送信方法は、World System Teletextなどの一部の電気通信プロトコル内で定義されています。[ 89 ]
マルチバイトコードには、3 つの特別なケースもあります。コードシーケンスESC $ @、、、ESC $ AおよびESC $ Bはすべて、当時の標準規格でマルチバイトセットが G0 でのみ許可されていたときに登録されたため、シーケンスから の代わりに受け入れて、G0 文字セットを指定する必要がありESC $ ( @ますESC $ ( B。[ 90 ]
制御文字セットを切り替えるための追加機能(めったに使用されない)がありますが、これは単一レベルのルックアップです。つまり、(上記のように)C0 セットは常に CL を介して呼び出され、C1 セットは常に CR を介して、またはエスケープ コードを使用して呼び出されます。上記のように、さらなる変更を可能にするために、任意の C0 文字セットには位置 0x1B に ESC 文字が含まれている必要があります。制御セット指定シーケンス(グラフィカル セットのシーケンスとは対照的に)は、 ANSI エスケープ コードの処理が適切なコンテキストでISO/IEC 10646 (UCS/Unicode) 内からも使用できます。ただし、シーケンス内の各バイトは、エンコーディングのコード ユニット サイズにパディングする必要があります。[ 91 ]
エスケープシーケンスの1バイトとその指定またはそれらが実行するその他の機能の表を以下に示します。 [ 92 ]
Note that the registry of F bytes is independent for the different types. The 94-character graphic set designated by ESC ( A through ESC + A is not related in any way to the 96-character set designated by ESC - A through ESC / A. And neither of those is related to the 94n-character set designated by ESC $ ( A through ESC $ + A, and so on; the final bytes must be interpreted in context. (Indeed, without any intermediate bytes, ESC A is a way of specifying the C1 control code 0x81.)
Also note that C0 and C1 control character sets are independent; the C0 control character set designated by ESC ! A (which happens to be the NATS control set for newspaper text transmission) is not the same as the C1 control character set designated by ESC " A (the CCITT attribute control set for Videotex).
The standard also defines a way to specify coding systems that do not follow its own structure.
ISO/IEC 2022 に戻るためのシーケンスも定義されています。ISO/IEC 2022 でエンコードされたこのシーケンスをサポートする登録には、(2019 年現在) さまざまなVideotexフォーマット、UTF-8、およびUTF-1が含まれます。[ 100 ] 2 番目のIバイト 0x2F ( /) は、そのバイト シーケンスを使用して ISO 2022 に戻らないコードの指定シーケンスに含まれています。これらのコードは、ISO 2022 に戻るための独自の手段 (異なるシーケンスやパディングされたシーケンスなど) を持っている場合もあれば、まったく持っていない場合もあります。[ 101 ]後者のタイプの既存の登録はすべて (2019 年現在) 透過的な生データ、Unicode/UCS フォーマット、またはそれらのサブセットです。[ 102 ]
特に注目すべきは、ISO/IEC 2022 構造に従わないISO/IEC 10646 ( Unicode ) フォーマットに切り替わるシーケンスです。これには、UTF-8 (制御文字用に 0x80–0x9F の範囲を予約しない)、その前身である UTF-1 (マルチバイト コードで GR バイトと GL バイトを混在させる)、UTF-16 および UTF-32 (より広い符号化単位を使用する) が含まれます。[ 100 ] [ 102 ]
UTF-8、UTF-16、UTF-32 のサブセット (レベル 1 と 2) およびUCS-2の 3 つのレベルについても、いくつかのコードが登録されています。[ 102 ]ただし、現在 ISO/IEC 10646 で規定されているコードは、UTF-8、UTF-16、UTF-32 のレベル 3 コードと UTF-8 の未指定レベル コードのみで、残りは非推奨としてリストされています。[ 104 ] ISO/IEC 10646 では、 UTF-16 と UTF-32 のビッグエンディアン形式は、エスケープシーケンスによって指定されると規定されています。[ 105 ]
UTF-8 に切り替わるシーケンスのうち、例えばxtermでサポートされているのがこれです。[ 14 ]ESC % G
UTF-16 および UTF-32 の標準リターン シーケンスのバリアントの使用は許可されていますが、エスケープ シーケンスのバイトはエンコーディングのコード ユニットのサイズ ( 001B 0025 0040UTF-16 の場合) に合わせてパディングする必要があります。つまり、標準リターン シーケンスのコーディングは ISO/IEC 2022 に厳密には準拠していません。このため、UTF-16 および UTF-32 の指定では、標準リターン構文を使用しない構文を使用します。[ 108 ]
ラベルによるエンコーディングを指定するために、X ConsortiumのCompound Textフォーマットは 5 つのプライベート使用 DOCS シーケンスを定義しています。[ 109 ]
「コード構造のアナウンス」シーケンス()は、特定のコード構造、または特定のコードバージョンで使用される特定のISO 2022機能のグループをアナウンスするために使用されます。アナウンスは組み合わせることができますが、特定の矛盾する組み合わせ(具体的には、ロッキングシフトアナウンス16~23とアナウンス1、3、4の使用)は規格で禁止されており、ISO/IEC 4873レベルのアナウンス12~14 [ 93 ](許容される構造的特徴を完全に規定している)の上にさらにアナウンスを使用することも禁止されています。アナウンスシーケンスは次のとおりです。ESC SP (0x20) F

IETF RFC では 6 つの 7 ビット ISO 2022 コード バージョン (ISO-2022-CN、ISO-2022-CN-EXT、ISO-2022-JP、ISO-2022-JP-1、ISO-2022-JP-2、ISO-2022-KR) が定義されており、そのうち ISO-2022-JP と ISO-2022-KR は過去に広く使用されてきました。[ 110 ] IBMを含むベンダーによって他の多くのバリアントが定義されています。[ 111 ] HTML5では UTF-8 が推奨エンコーディングですが、ISO-2022-JP のレガシーコンテンツは依然として広く普及しているため、WHATWGエンコーディング標準では引き続きサポートされています。[ 112 ]クロスサイトスクリプティングなどのコードインジェクション攻撃への懸念から、ISO -2022-KR、ISO-2022-CN、ISO-2022-CN-EXT は完全に置換文字にマッピングされています。[ 113 ] [ 114 ] [ 112 ] [ 114 ]
8 ビット コード バージョンには、Extended Unix Codeが含まれます。[ 11 ] [ 12 ] ISO /IEC 8859エンコーディングは、ISO/IEC 4873 で規定されたサブセットで ISO 2022 にも準拠しています。[ 9 ] [ 10 ]
ISO-2022-JPは、特に電子メール。JUNET ネットワークで使用するために導入され、後に1993 年のIETF RFC 1468 でコード化されました。 [ 115 ]日本語の他のエンコーディング8 ビットのクリーンな必要としないという利点があります。マイクロソフトはこれをコード ページ 50220。 [ 116 ] ASCII で始まり、次のエスケープ シーケンスが含まれています。
ESC ( BASCII(1文字あたり1バイト)に切り替えるESC ( JJIS X 0201-1976 (ISO/IEC 646:JP) ローマン文字セット (1文字あたり1バイト)に切り替えるESC $ @JIS X 0208-1978(1文字あたり2バイト)に切り替えるESC $ BJIS X 0208-1983(1文字あたり2バイト)に切り替えるJIS X 0208-1990で追加された2文字の使用は許可されているが、IRRシーケンスを含めず、つまりJIS X 0208-1983と同じエスケープシーケンスを使用する。[ 115 ]また、G0以外のマルチバイトセットの指定が可能になる前に登録されたため、JIS X 0208のエスケープには2番目のIバイトは含まれない(。[ 90 ]
RFC では、既存のシステムの中には と を区別しないものや と を区別しないものがあったと指摘しているが、電子メールなどのメッセージを単に中継するシステムではエスケープシーケンスを変更すべきではないと規定している。[115] HTML5 で参照されている WHATWGESC ( BエンコーディングESC ( J標準ESC $ @でESC $ Bはとを区別して処理するが、デコード時にはを と同じように扱い、エンコード時には JIS X 0208 にのみ を使用する。[ 117 ]また、RFC では、過去のシステムの中には、実際にはISO-IR-11 ( ISO 646およびワールドシステムテレテキストのスウェーデン版) に登録されている JIS X 0208 から切り替えるためにシーケンスを誤って使用していたものがあったと指摘している。[ 115 ] [ i ]ESC ( BESC ( JESC $ @ESC $ BESC $ BESC ( H
JIS X 0201-1976ESC ( Iかなセット (1 文字あたり 1 バイト)に切り替えるための の使用はISO-2022-JP プロファイルの一部ではありませんが、[ 115 ]時々使用されます。Python では、ISO-2022-JP-EXTというラベルのバリアントでこれを許可しています(これは、後述するように JIS X 0212 も組み込んでおり、EUC-JPのカバー範囲を完成させています)。[ 118 ] [ 119 ]これは、名前と構造の両方で、 DECがISO-2022-JPextと表記するエンコーディングに近く、さらにSuper DEC Kanjiのカバー範囲を完成させるために でアクセスする2 バイトのユーザー定義領域を追加しています。[ 120 ] WHATWG/HTML5 バリアントでは、ISO-2022-JP 入力で JIS X 0201 カタカナをデコードできますが、エンコード時に文字を JIS X 0208 相当のものに変換します。[ 117 ] JIS X 0201 かなが追加で許可されている ISO-2022-JP の Microsoft のコード ページはコード ページ 50221です。[ 116 ]ESC $ ( 0
JIS7およびJIS8と呼ばれる他の古いバリアントは、JIS X 0201で定義された 7 ビットおよび 8 ビットのエンコーディングを直接ベースとしており、それぞれShift Out および Shift Inを使用するか、8 番目のビット (GR 呼び出し) を設定することにより、エスケープ シーケンスなしで G1 から JIS X 0201 カナを使用できます。 [ 121 ]これらは広く使用されていません。[ 121 ]拡張 8 ビット JIS X 0201 での JIS X 0208 サポートは、Shift JISを介してより一般的に実現されます。Shift Out および Shift In を介して 1 バイトのカタカナを使用する JIS X 0201 ベースの ISO 2022 の Microsoft のコード ページは、コード ページ 50222です。[ 116 ]
ISO-2022-JP-2は ISO-2022-JP の多言語拡張であり、RFC 1554(1993 年) で定義され、ISO-2022-JP のエスケープシーケンスに加えて次のエスケープシーケンスを許可します。ISO/IEC 8859パートは 96 文字セットであり、G0 に指定することはできず、シングルシフトコード SS2 の 7 ビットエスケープシーケンス形式を使用して G2 からアクセスします。 [ 122 ]
ESC $ AGB 2312-1980(1文字あたり2バイト)に切り替えるESC $ ( CKS X 1001-1992 (1文字あたり2バイト)に切り替えるESC $ ( DJIS X 0212-1990(1文字あたり2バイト)に切り替えるESC . AISO/IEC 8859-1上位部、拡張ラテン1セット(1文字あたり1バイト)に切り替える[G2に指定]ESC . FISO/IEC 8859-7上位部、基本ギリシャ文字セット(1文字あたり1バイト)に切り替える[G2に指定]ISO-2022-JPは、JIS X 0212のISO-2022-JP-2表現のみを含み、他の拡張機能は含まないため、1997年のRFC 2237によりISO-2022-JP-1と命名された。 [ 123 ]
IBM は、それぞれ異なるエスケープシーケンスを使用する 9 つの 7 ビット ISO 2022 ベースの日本語エンコーディングを実装しています。IBM-956、IBM-957、IBM-958、IBM-959、IBM-5052、IBM-5053、IBM-5054、IBM-5055、および ISO-2022-JP であり、これらはまとめて「TCP/IP 日本語コード化文字セット」と呼ばれています。[ 124 ] CCSID 9148 は標準 (RFC 1468) ISO-2022-JP です。[ 125 ]
2000年に初版が発行されたJIS X 0213規格は、ISO-2022-JP-2の拡張部分を除いたISO-2022-JPの更新版であるISO-2022-JP-3を定義しています。JIS X 0213による追加は、基本規格であるJIS X 0208と比較して、拡張されたJIS平面1に対する新規登録と、新しい平面2に対する独自の登録をもたらしました。2004年版の規格における平面1へのさらなる追加により、ISO-2022-JP-2004と呼ばれるプロファイルのさらなる改訂版に追加登録が加えられました。基本的なISO-2022-JP指定コードに加えて、以下の指定が認識されます。
ESC ( IJIS X 0201-1976かなセット(1文字あたり1バイト)に切り替えるESC $ ( OJIS X 0213-2000プレーン1(1文字あたり2バイト)に切り替えるESC $ ( PJIS X 0213-2000プレーン2(1文字あたり2バイト)に切り替えるESC $ ( QJIS X 0213-2004プレーン 1 (1文字あたり2バイト、ISO-2022-JP-2004のみ)に切り替えるISO-2022-KRは1993 年のRFC 1557で定義されています。 [ 134 ]これは ASCII と韓国語の 2 バイト文字KS X 1001-1992をエンコードします。 [ 135 ] [ 136 ]以前は KS C 5601-1987 と呼ばれていました。ISO-2022-JP-2 とは異なり、行の先頭に 1 回 KS X 1001 を G1 に指定した後、 Shift Out 文字と Shift In 文字を使用してそれらを切り替えますESC $ ) C。 [ 134 ]
ISO-2022-CNおよびISO-2022-CN-EXTは 1996 年のRFC 1922で定義されています。これらは 7 ビットのエンコーディングで、Shift Out および Shift In 関数 (G0 と G1 の間をシフトするため) と、シングルシフト関数 SS2 および SS3 (G2 および G3 にアクセスするため) の 7 ビットのエスケープ コード形式の両方を使用します。 [ 137 ]これらは、文字セットGB 2312簡体字中国語用) およびCNS 11643繁体字中国語用) をサポートしています。
基本的な ISO-2022-CN プロファイルは、G0 (シフトイン) セットとして ASCII を使用し、GB 2312 と CNS 11643 の最初の 2 つのプレーンも含まれています (これらの 2 つのプレーンは、RFC が付録で対応関係を提供している一般的なBig5のすべての繁体字中国語を表すのに十分であるため)。 [ 137 ]
ESC $ ) AGB 2312-1980(1文字あたり2バイト)に切り替える[G1に指定]ESC $ ) GCNS 11643-1992プレーン 1 (1文字あたり2バイト) [G1に指定]に切り替えるESC $ * HCNS 11643-1992 プレーン2(1文字あたり2バイト)に切り替える[G2に指定]ISO-2022-CN-EXTプロファイルでは、以下の追加のセットとプレーンが許可されています。[ 137 ]
ESC $ ) EISO-IR-165(1文字あたり2バイト)に切り替える[G1に指定]ESC $ + ICNS 11643-1992 プレーン3(1文字あたり2バイト)に切り替える[G3に指定]ESC $ + JCNS 11643-1992 プレーン4(1文字あたり2バイト)に切り替える[G3に指定]ESC $ + KCNS 11643-1992 プレーン 5 (1文字あたり2バイト) に切り替える[G3に指定]ESC $ + LCNS 11643-1992 プレーン6(1文字あたり2バイト)に切り替える[G3に指定]ESC $ + MCNS 11643-1992 プレーン7(1文字あたり2バイト)に切り替える[G3に指定]ISO-2022-CN-EXTプロファイルでは、追加のGuobiao標準グラフィックセットが許可されているが、登録済みのISO 2022エスケープシーケンスが割り当てられていることが条件となっているとさらに記載されている。[ 137 ]
ESC(シングルバイト文字セットの場合)またはESC $(マルチバイト文字セットの場合)の後の文字は、指定される文字セットの種類とワーキングセットを指定します。上記の例では、文字((0x28)は94文字セットをG0文字セットに指定し、一方)、*または+(0x29~0x2B)はG1~G3文字セットに指定します。
ISO-2022-KR と ISO-2022-CN は ISO-2022-JP よりも使用頻度が低く、セキュリティ上の懸念から意図的にサポートされない場合もあります。特に、HTML5で使用されるWHATWGエンコーディング標準では、ISO-2022-KR、ISO-2022-CN、ISO-2022-CN-EXT (およびHZ-GB-2312 ) を「置換」デコーダ[ 113 ]にマッピングし、クライアントとサーバー間のエンコーディングサポートの違いを利用する特定のクロスサイトスクリプティングや関連攻撃を防止しています。[ 114 ]同じセキュリティ上の懸念 (ASCII バイトのシーケンスが異なる方法で解釈されることを許容する) は ISO-2022-JP とUTF-16にも当てはまりますが、これらは展開されたコンテンツでより頻繁に使用されているため、この処理は適用されませんでした。[ 112 ]
2024年4月、 glibcにおけるISO-2022-CN-EXTの実装にセキュリティ上の欠陥[ 138 ]が発見され、Linuxシステム上でエンコーディングを完全に無効にするよう勧告された[ 139 ] 。

ISO 2022 のサブセットを 8 ビット シングルバイト エンコーディングに適用したものがISO/IEC 4873で定義されており、これはEcma InternationalによってECMA-43 としても発行されています。ISO /IEC 8859 はISO/IEC 4873 (または ECMA-43) レベル 1 の 8 ビット コードを定義します。[ 9 ] [ 10 ]
ISO/IEC 4873 / ECMA-43 は、3 つのレベルのエンコーディングを定義しています。[ 140 ]
以前の規格では、ISO/IEC 646 の不変位置が保持され、他の位置がスペース文字 (結合文字ではない) に割り当てられ、0x23 が£または#に割り当てられ、0x24が$または¤に割り当てられるという条件で、G0 セットでの非 ASCII 割り当てが許可されていました。[ 141 ]例えば、JIS X 0201の 8 ビット エンコーディングは以前の規格に準拠しています。これはその後、ISO/IEC 646:1991 IRV / ISO-IR No. 6 セット (ASCII) を完全に指定するように変更されました。[ 142 ] [ 143 ] [ 144 ]
ISO/IEC 646 IRV (1991 年以降 ASCII と同期) を ISO/IEC 4873 レベル 1 で C1 または G1 を設定せずに使用すること、つまりシフト コードを使用せず、最上位ビットが常にゼロである 8 ビット環境で IRV を使用することは、 ISO 4873 DVと呼ばれ、DV は「デフォルト バージョン」を意味します。[ 145 ]
異なるセットに重複する文字が存在する場合、ISO/IEC 4873 / ECMA-43 の現行版では、それらの文字は、出現する最も番号の小さいワーキング セットでのみ使用が許可されています。[ 146 ]例えば、文字が G1 セットと G3 セットの両方に存在する場合、G1 セットから使用する必要があります。ただし、以前の版では他のセットからの使用が許可されていたことが指摘されています。[ 144 ]
ISO/IEC 8859 はISO/IEC 4873 のレベル 1 における完全な符号化を定義しており、複数の ISO/IEC 8859 パートを一緒に使用することは許可されていません。ISO / IEC 4873 のレベル 2 および 3 には、代わりに ISO/IEC 10367 を使用する必要があると規定しています。 [ 9 ] [ 10 ] ISO/IEC 10367:1991 には、ISO/IEC 8859 の最初の 9 パート (つまり、発行された 1991 年時点で存在していたもの) で使用されているものと同じ G0 および G1 セットと、いくつかの補足セットが含まれています。[ 147 ]
文字セット指定エスケープシーケンスは、情報交換中にバージョンを識別または切り替えるために、さらに別のプロトコルで要求される場合にのみ使用されます。この場合、規格では、ISO/IEC 4873 レベルを指定する ISO/IEC 2022 アナウンサーシーケンスに続いて、C0、C1、G0、G1、G2、G3 の文字セット指定をそれぞれ指定する完全なエスケープシーケンス (ただし、レベル 1 の G2 および G3 指定は省略) が要求され、Fバイトが 0x7E の場合は空のセットを示します。各 ISO/IEC 4873 レベルには、独自の単一の ISO/IEC 2022 アナウンサーシーケンスがあり、次のとおりです。[ 148 ]
拡張Unixコード(EUC)は、主に日本語、韓国語、簡体字中国語に使用される8ビット可変幅文字エンコーディングシステムです。ISO 2022に基づいており、ISO 2022構造に準拠する文字セットのみがEUC形式を持つことができます。最大4つのコード化された文字セット(G0、G1、G2、G3)を表現できます。G0セットはGL経由で呼び出され、G1セットはGR経由で呼び出され、G2およびG3セットは(存在する場合)CRバイト(それぞれ0x8Eおよび0x8F)として使用される単一シフトSS2およびSS3を使用して呼び出され、GR(GLではない)経由で呼び出されます。[ 11 ]ロックシフトコードは使用されません。[ 12 ]
G0 セットに割り当てられるコードは ASCII またはKS-Roman (KS X 1003) やJIS-Roman ( JIS X 0201の下半分)などの国のISO 646文字セットです。[ 11 ]したがって、 EUC-JP の一部のバージョンでは 0x5C ( US-ASCII のバックスラッシュ) が円記号を表すために使用され、 EUC-KR の一部のバージョンではウォン記号を表すために使用されます。
G1は、2バイトで表現される94x94符号化文字セットに使用されます。GB 2312のEUC-CN形式とEUC-KRは、このような2バイトEUCコードの例です。EUC -JPでは最大3バイト(SS3と2バイト)で表現される文字が含まれますが、EUC-TWでは1文字が最大4バイト(SS2と3バイト)になる場合があります。
EUCコード自体はISO 2022のアナウンサーまたは指定シーケンスを使用していませんが、次の4つのアナウンサーシーケンスのシーケンスに対応しており、意味は次のように分類されます。[ 149 ]
Xコンソーシアムは、1989 年に交換フォーマットとして Compound Text という ISO 2022 プロファイルを定義しました。[150] これは、HT ( )、NL (改行、LF としてコード化)、ESC ( ) 、 CSI ( 8 ビット表現) の 4 つの制御コードのみを使用し、[ 151 ] SDS ( ) CSIシーケンスは双方向テキスト制御に使用されます。[ 152 ]これは、GL と GR に G0 と G1 を使用する 8 ビットコードであり、初期状態ではISO-8859-1に従います。 [ 153 ]次の F バイトが使用されます。0x090x0A0x1B0x9BCSI … ]
ラベルによるエンコーディングの指定には、X11 複合テキストでは 5 つのプライベート使用 DOCS シーケンスが定義されています。可変長エンコーディングの場合は( )、固定長エンコーディングの場合はから までで、それぞれ 1 バイトから 4 バイトを使用します。ISO 2022に戻るために別のエスケープ シーケンスを使用する代わりに、最初のエスケープ シーケンスに続く 2 バイトで、残りの長さをバイト単位で指定し、バイトを使用して 128 ベースでエンコードします。エンコード ラベルは、エンコードされたテキストの前にISO 8859-1に含まれ、 STX ( )で終了します。[ 109 ]ESC % / 01B 25 2F 30ESC % / 1ESC % / 40x80–FF0x02
@ABESC , FESC 0x1B 0x2Cシーケンスは、標準の初期版で、さらに 94 文字セットを G0 に指定するように定義されていました。 [ 99 ] 96 文字セットを G0 に指定することはできないため、この最初のIバイトは、標準の現在の版では使用されていません。ただし、 MARC-8にはまだ記載されています。 [ 3 ]ESC ( HDBCSからASCIIに切り替える、より新しいシステムの場合。したがって、ISO/IEC 2022 (およびその他の文字符号化規格) のオクテット値表記法は、x と y の値を 16 進表記法に変換することにより、この文書で使用されるオクテット値表記法に変換できます。たとえば、04/15 は 4F に相当します。
{{citation}}: CS1 maint: 数値名: 著者リスト (リンク)ESC 2/8 4/10。ESC ( J{{citation}}: CS1 maint: 数値名: 著者リスト (リンク){{cite book}}: CS1 maint: 数値名: 著者リスト (リンク){{cite book}}: CS1 maint: 数値名: 著者リスト (リンク){{cite book}}: CS1 maint: 数値名: 著者リスト (リンク){{citation}}: CS1 maint: 数値名: 著者リスト (リンク){{citation}}: CS1 maint: 数値名: 著者リスト (リンク){{citation}}: CS1 maint: 数値名: 著者リスト (リンク){{citation}}: CS1 maint: 数値名: 著者リスト (リンク){{citation}}: CS1 maint: 数値名: 著者リスト (リンク)