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 ]
The ASCII character set supports the ISO Basic Latin alphabet (equivalent to the English alphabet), and does not provide good support for languages which use additional letters, or which use a different writing system altogether. Other writing systems with relatively few characters, such as Greek, Cyrillic, Arabic or Hebrew, as well as forms of the Latin script using diacritics or letters absent from the ISO Basic Latin alphabet, have historically been represented on personal computers with different 8-bit, single byte, extended ASCII encodings, which follow ASCII when the most significant bit is 0 (i.e. bytes 0x00–7F, when represented in hexadecimal), and include additional characters for a most significant bit of 1 (i.e. bytes 0x80–FF). Some of these, such as the ISO 8859 series, conform to ISO 2022,[9][10] while others such as DOS code page 437 do not, usually due to not reserving the bytes 0x80–9F for control codes.
Certain East Asian languages, specifically Chinese, Japanese, and Korean (collectively "CJK"), are written using far more characters than the maximum of 256 which can be represented in a single byte, and were first represented on computers with language-specific double-byte encodings or variable-width encodings; some of these (such as the Simplified Chinese encoding GB 2312) conform to ISO 2022, while others (such as the Traditional Chinese encoding Big5) do not. Control codes in ISO 2022 are always represented with a single byte, regardless of the number of bytes used for graphical characters. CJK encodings used in 7-bit environments which use ISO 2022 mechanisms to switch between character sets are often given names starting with "ISO-2022-", most notably ISO-2022-JP, although some other CJK encodings such as EUC-JP also make use of ISO 2022 mechanisms.[11][12]
Since the first 256 code points of Unicode were taken from ISO 8859-1, Unicode inherits the concept of C0 and C1 control codes from ISO 2022, although it adds other non-printing characters besides the ISO 2022 control codes. However, Unicode transformation formats such as UTF-8 generally deviate from the ISO 2022 structure in various ways, including:
ISO 2022 escape sequences do, however, exist for switching to and from UTF-8 as a "coding system different from that of ISO 2022",[13] which are supported by certain terminal emulators such as xterm.[14]
ISO/IEC 2022 specifies the following:
A specific implementation does not have to implement all of the standard; the conformance level and the supported character sets are defined by the implementation. Although many of the mechanisms defined by the ISO/IEC 2022 standard are infrequently used, several established encodings are based on a subset of the ISO/IEC 2022 system.[19] In particular, 7-bit encoding systems using ISO/IEC 2022 mechanisms include ISO-2022-JP (or JIS encoding), which has primarily been used in Japanese-language e-mail. 8-bit encoding systems conforming to ISO/IEC 2022 include ISO/IEC 4873 (ECMA-43), which is in turn conformed to by ISO/IEC 8859,[9][10] and Extended Unix Code, which is used for East Asian languages.[11] More specialised applications of ISO 2022 include the MARC-8 encoding system used in MARC 21 library records.[3]
The escape sequences for switching to particular character sets or encodings are registered with the ISO-IR registry (except for those set apart for private use, the meanings of which are defined by vendors, or by protocol specifications such as ARIB STD-B24) and follow the patterns defined within the standard. Character encodings making use of these escape sequences require data to be processed sequentially in a forward direction, since the correct interpretation of the data depends on previously encountered escape sequences.
Specific profiles such as ISO-2022-JP may impose extra conditions, such as that the current character set is reset to US-ASCII before the end of a line. Furthermore, the escape sequences declaring the national character sets may be absent if a specific ISO-2022-based encoding permits or requires this, and dictates that particular national character sets are to be used. For example, ISO-8859-1 states that no defining escape sequence is needed.
大規模な文字セットを表現するために、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 ]などがあります。
Characters are expected to be spacing characters, not combining characters, unless specified otherwise by the graphical set in question.[38] ISO 2022 / ECMA-35 also recognizes the use of the backspace and carriage return control characters as means of combining otherwise spacing characters, as well as the CSI sequence "Graphic Character Combination" (GCC)[38] (CSI 0x20 (SP) 0x5F (_)).[39]
Use of the backspace and carriage return in this manner is permitted by ISO/IEC 646 but prohibited by ISO/IEC 4873 / ECMA-43[40] and by ISO/IEC 8859,[41][42] on the basis that it leaves the graphical character repertoire undefined. ISO/IEC 4873 / ECMA-43 does, however, permit the use of the GCC function provided that the sequence of characters is kept the same and merely displayed in one space, rather than being over-stamped to form a character with a different meaning.[43]
Control character sets are classified as "primary" or "secondary" control code sets,[44] respectively also called "C0" and "C1" control code sets.[45]
A C0 control set must contain the ESC (escape) control character at 0x1B[46] (a C0 set containing only ESC is registered as ISO-IR-104),[47] whereas a C1 control set may not contain the escape control whatsoever.[34] Hence, they are entirely separate registrations, with a C0 set being only a C0 set and a C1 set being only a C1 set.[45]
If codes from the C0 set of ISO 6429 / ECMA-48, i.e. the ASCII control codes, appear in the C0 set, they are required to appear at their ISO 6429 / ECMA-48 locations.[46] Inclusion of transmission control characters in the C0 set, besides the ten included by ISO 6429 / ECMA-48 (namely SOH, STX, ETX, EOT, ENQ, ACK, DLE, NAK, SYN and ETB),[48] or inclusion of any of those ten in the C1 set, is also prohibited by the ISO/IEC 2022 / ECMA-35 standard.[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 ]。
Although officially considered shift codes and named accordingly, single-shift codes are not always viewed as shifts,[12] and they may simply be viewed as prefix bytes (i.e. the first bytes in a multi-byte sequence),[11] since they do not require the encoder to keep the currently active set as state, unlike locking shift codes. In 8-bit environments, either GL or GR, but not both, may be used as the single-shift area. This must be specified in the definition of the code version.[73] For instance, ISO/IEC 4873 specifies GL, whereas packed EUC specifies GR. In 7-bit environments, only GL is used as the single-shift area.[75][76] If necessary, which single-shift area is used may be communicated using announcer sequences.
The names "locking shift zero" (LS0) and "locking shift one" (LS1) refer to the same pair of C0 control characters (0x0F and 0x0E) as the names "shift in" (SI) and "shift out" (SO). However, the standard refers to them as LS0 and LS1 when they are used in 8-bit environments and as SI and SO when they are used in 7-bit environments.[60]
The ISO/IEC 2022 / ECMA-35 standard permits, but discourages, invoking G1, G2 or G3 in both GL and GR simultaneously.[77]
The ISO International register of coded character sets to be used with escape sequences (ISO-IR) lists graphical character sets, control code sets, single control codes and so forth which have been registered for use with ISO/IEC 2022. The procedure for registering codes and sets with the ISO-IR registry is specified by ISO/IEC 2375. Each registration receives a unique escape sequence, and a unique registry entry number to identify it.[78][79] For example, the CCITT character set for Simplified Chinese is known as ISO-IR-165.
Registration of coded character sets with the ISO-IR registry identifies the documents specifying the character set or control function associated with an ISO/IEC 2022 non‑private-use escape sequence. This may be a standard document; however, registration does not create a new ISO standard, does not commit the ISO or IEC to adopt it as an international standard, and does not commit the ISO or IEC to add any of its characters to the Universal Coded Character Set.[80]
ISO-IR registered escape sequences are also used encapsulated in a Formal Public Identifier to identify character sets used for numeric character references in SGML (ISO 8879). For example, the string ISO 646-1983//CHARSET International Reference Version (IRV)//ESC 2/5 4/0 can be used to identify the International Reference Version of ISO 646-1983,[81] and the HTML 4.01 specification uses ISO Registration Number 177//CHARSET ISO/IEC 10646-1:1993 UCS-4 with implementation level 3//ESC 2/5 2/15 4/6 to identify Unicode.[82] The textual representation of the escape sequence, included in the third element of the FPI, will be recognised by SGML implementations for supported character sets.[81]
Escape sequences to designate character sets take the form ESC I [I...] F. As mentioned above, the intermediate (I) bytes are from the range 0x20–0x2F, and the final (F) byte is from the range 0x30–0x7E. The first I byte (or, for a multi-byte set, the first two) identifies the type of character set and the working set it is to be designated to, whereas the F byte (and any additional I bytes) identify the character set itself, as assigned in the ISO-IR register (or, for the private-use escape sequences, by prior agreement).
Additional I bytes may be added before the F byte to extend the F byte range. This is currently only used with 94-character sets, where codes of the form ESC ( ! F have been assigned.[83] At the other extreme, no multibyte 96-sets have been registered, so the sequences below are strictly theoretical.
他のエスケープシーケンスタイプと同様に、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 ]
Fバイトのレジストリは、異なるタイプごとに独立していることに注意してください。 から で指定される94文字のグラフィックセットは、ESC ( AからでESC + A指定される96文字のセットとは一切関係がありません。また、どちらも からで指定される94 n文字のセットとは関係がなく、以下同様です。最後のバイトは文脈に応じて解釈する必要があります。(実際、中間バイトなしで は、C1制御コード0x81を指定する方法です。)ESC - AESC / AESC $ ( AESC $ + AESC A
また、C0 および C1 制御文字セットは独立していることに注意してください。 (たまたま新聞テキスト送信用の NATS 制御セットである) で指定される C0 制御文字セットは、 ( Videotex用のCCITT属性制御セットである)で指定される C1 制御文字セットとは異なります。ESC ! AESC " A
この規格は、規格自体の構造に従わないコーディングシステムを指定する方法も定義している。
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: 数値名: 著者リスト (リンク)