ISO/IEC 2022エスケープシーケンス

エスケープシーケンス (文字コード)

[7] エスケープシーケンス (escape sequence) は、 ESCAPE から始まり、0個以上中間バイトと1つの終端バイトによって構成されるバイト列です。 ISO/IEC 2022 符号拡張法に従う文字集合の指定や、 制御機能呼び出しなどに用います。

仕様書

意味

[15]

エスケープシーケンス (escape sequence)
符号拡張手順において制御のために使用する一つ以上のビット組合せ。 先頭のビット組合せは、制御文字 ESCAPE (エスケープ) を表現する。

[1]

3.1 エスケープシーケンス (escape sequence)
符号拡張手順において制御のために使用する一つ以上のビット組合せ。 先頭のビット組合せは、 制御文字 ESCAPE (エスケープ) を表現する。 JIS X 0201:1997 3.1

構文

[10] JIS X 0202:1998 13.1:

[11] エスケープ・シーケンスを構成する各ビット組合せは、 それ単独で出現した時の意味とは無関係で、 エスケープ・シーケンス全体だけで意味が決まります。 JIS X 0202:1998 13.1

[12] >>10 に当てはまらないバイトエスケープ・シーケンス (のようなもの) に含まれるかもしれません。 応用誤りを識別して回復する手段を提供する必要があるかもしれませんが、 それは ISO/IEC 2022 の適用範囲外とされています。 JIS X 0202:1998 13.1

[3] エスケープ・シーケンスの種類: エスケープ・シーケンスは、 ESC の直後のビット組合せにより次の通り分類されます JIS X 0202:1998 13.2.1, 13.2.2

種類ESC の次のビット組合せ機能
0F02/00告知 (ANNOUNCE CODE STRUCTURE)
1F02/01C0 指示 (C0-DESIGNATE)
2F02/02C1 指示 (C1-DESIGNATE)
3F02/03単独制御機能
4F02/04複数バイト図形文字集合指示
5F02/05DESIGNATE OTHER CODING SYSTEM
6F02/06IDENTIFY REVISED REGISTRATION
7F02/07(予約)
8F02/08G0 指示 (G0-DESIGNATE 94-SET)
9F02/09G1 指示 (G0-DESIGNATE 94-SET)
10F02/10G2 指示 (G0-DESIGNATE 94-SET)
11F02/11G3 指示 (G0-DESIGNATE 94-SET)
12F02/12G0 指示 (G0-DESIGNATE 96-SET)
13F02/13G1 指示 (G0-DESIGNATE 96-SET)
14F02/14G2 指示 (G0-DESIGNATE 96-SET)
15F02/15G3 指示 (G0-DESIGNATE 96-SET)
Fp03/0003/15私用制御機能
Fe04/0005/15C1 制御機能
Fs06/0007/14標準単独制御機能

(12FISO/IEC 2022 では予約)

[62] 長さ上限については中間バイト参照。

誤り処理

ISO/IEC 2022 のエラー処理の項も参照

[8] 00/00〜01/15, 07/15〜15/15 が誤って含まれた場合 応用は誤り状態の識別手段及び誤り状態からの回復手段を 提供する必要があるかもしれませんが、その様な要件は ISO/IEC 2022 の範囲外とするとされています。 (JISX0202:1998 13.1 備考参照。)

[1] >>8 エスケープ・シーケンスに出現し得ないバイトが出てきた場合だけでなく、未知のエスケープ・シーケンスが出てきた場合の回復はどうですかね? これも実装依存ですかね?

ISO/IEC 2022 エスケープシーケンスを用いた符号

[72] ISO/IEC 2022 の符号構造に基づく符号は無数に存在し、 その形態も様々ですが、その中には ISO/IEC 2022エスケープシーケンス固定シフトを使って状態を切り替える特徴を有する一連の符号群が存在しています。

[73] 歴史的に各社の Unix の多くはこの種の符号を使っていました。 ロケールにより、またソフトウェアにより、 切り替えに使うエスケープシーケンス固定シフトは少しずつ違いがあります。 また利用可能な符号化文字集合にも違いが大きいです。

[74] Emacsiso-2022-7bit, iso-2022-7bit-lock, iso-2022-7bit-lock-ss2, iso-2022-7bit-ss2, iso-2022-8bit-ss2, iso-2022-cjk を実装しています。 また、 junet, iso-2022-cn, iso-2022-cn-ext, iso-2022-int-1, iso-2022-jp, iso-2022-jp-1978-irv, iso-2022-jp-2, iso-2022-jp-2004, iso-2022-jp-3, iso-2022-jp, iso-2022-kr を実装しています。

[75] DECの文字コードにも各種あります。

[76] 符号化文字集合がある程度限定されたものに、 ISO-2022-JP の一族、 ISO-2022-CN の一族、 ISO-2022-KRISO-2022-INTCompound TextISO/IEC 4873VideotexStringARIB STD-B5T.61MARC-8 などがあります。

[89] Mosaic-L10N: User's Guide, , http://takadat.com/i/Mosaic-l10n/users.html#detection

irori

[125] irori, , https://web.archive.org/web/20000526204917/http://irori.topica.ne.jp/

  • PC/AT 互換機上の Linux で動作する、文字列処理のライブラリです。
  • ISO-2022 に準拠した形式の、多国語混在テキストを扱います。
  • 各文字コード(日本語/JISX0208・中国語/GB2312 等)は、PlugIn です。PlugIn を追加する事で、アプリケーションが対応する言語を増やせます。

[126] 残念ながら Internet Archive にはウェブサイトのトップページしか現存しません。

[86] e漢字プラグインの配布ファイル eKanji.src.0.0p1.tar.gz 内のサンプルファイル eKanji.txt によると、 少なくても ESC 2/4 4/0, ESC 2/4 4/2, ESC 2/8 4/2 が使えました。また、 KS X 1001 と思われるものが SO / SI と共に (エスケープシーケンスなく) 使われました。

[87] 同ファイルおよびソースコードによると、 ESC eKanji から改行まではe漢字として解釈されました。 その部分だけ抜粋:

eKanji/Unicode :eKanji<u4e00><u4e01><u4e02><u4e03><u4e04><u4e05><u4e06><u4e07>
eKanji/ekan0020:eKanji<k49179><k49180><k49181><k49182><k49183><k49184><k49185><k49186>
eKanji/eKan0030:eKanji<m50468><m50469><m50470><m50471><m50472><m50473><m50474><m50475>

[88] ESC eKanji は独自仕様。 ISO/IEC 2022 では ESC 5/5C1制御文字なので、 そのような制御機能を含むC1集合指示された状態、 と解釈すれば一応は ISO/IEC 2022 の枠内。

ISO-2022-ESC B

[81] Aprotool TM Editor が対応していた >>80, >>81 ISO-2022-ESC B は次のようなものと付属ドキュメントで説明されています。

  1. すべて 7bitで構成されている。
  2. G0, G1 集合のみ使用する。
  3. 94領域文字集合は必ず G0, 96領域文字集合は必ず G1 にする。
  4. 図形集合の切り替えにすべてロッキングシフトを使用する。
  5. ESC$@, ESC$A, ESC$B 等の慣用表現は用いない。

  ESC B : アナウンサ, G0 を SI で GL に、G1 を S0 で GL に指定する。

[84] 名前にある 「ESC B」は、 ファイルの先頭に書く >>82 告知列 ESC 2/0 4/2 に由来するようです。

[83] すべてに固定シフトを使うというのは、 G0, G1 とも (ASCII も) 例外なくということのようです。 >>82

[85] なお「慣用表現」不使用は ISO/IEC 2022 違反。 指示シーケンス参照。

文脈

[13] ISO/IEC 2022 による文字列符号化の他にも、 次の場面でエスケープシーケンスが用いられます。

[14] その他のエスケープシーケンスの用法

[79] KS X 6001:1990 のファイル内で使うエスケープシーケンス: ISO/IEC 6429VT のものと似ているが少し違う

ISO/IEC 10646 におけるエスケープシーケンス

[16] ISO/IEC 10646エスケープシーケンスの用法を規定しています。 (Unicode には相当する規定がありません。) 構文については制御文字

[17] ISO/IEC 2022符号拡張制御機能 (指示シーケンス単独シフト固定シフト) の ISO/IEC 10646 における利用は禁止されています。 この規定は曖昧ですが、 図形文字集合指示呼び出しによる ISO/IEC 10646図形文字符号位置の解釈の変更が禁止されているものとみられます。 制御文字

[35] 禁止されたものが使われた時の挙動は不明です。

[30] ISO/IEC 10646エスケープシーケンスの用法について4通りを自身で特に定めています。 これらは、 「ISO/IEC 2022 のエスケープシーケンスを使う場合」、 「ISO/IEC 6429 のエスケープシーケンスを使う場合」 といった限定がついていて、 使う、使わないは判断が委ねられているようです (利用者に? 実装者に?)。

[31] 現実問題としてこれらや、その他のエスケープシーケンス制御シーケンスが使われるのは極めて稀です。 いわゆるANSIエスケープシーケンス端末エミュレーターの類で使われる程度でしょうか。


[33] ISO/IEC 10646 は、 DOCS の用法を2通り定めていました。

[2] ISO/IEC 10646 は、 エスケープシーケンスによって符号化表現実装水準を識別できるとしていました。 ISO/IEC 2022 符号化文字データ要素中でも ISO/IEC 10646 符号化文字データ要素中でも利用できるとしていました。 >>53, >>18, >>38, >>42

[46] なぜか UTF-8 (と UTF-1 >>53) だけ実装水準の指定がないものも用意されていました >>42 注記実装水準の存在意義が問われそうですが、 実際不要だったのでしょう。

[56] 実装水準が廃止され、 Unicode符号化形式が侵略してからは、 次のような規定に変わっています。 >>55 (ISO/IEC 10646 の本文の規定だけで、 ISO-IR の登録は前のまま放置されています。)

[64] なお、古くからの実装で、 ESC 2/5 3/8 で UTF-8 を表すものもあります。 DOCS

[32] ISO/IEC 10646 は、 ISO/IEC 10646 から ISO/IEC 2022 への切り替えに ESC 2/5 4/0 を使うとしていました。 ISO/IEC 2022 符号化文字データ要素中でも ISO/IEC 10646 符号化文字データ要素中でも利用できるとしていました。 >>18

[34] ISO/IEC 2022 符号化文字データ要素中での利用が想定された理由は謎です。

[36] DOCS は、 標準的な復帰のエスケープシーケンスである ESC 2/5 4/0 で ISO/IEC 2022 に復元できる場合とできない場合を区別し、 できないシステムへの切り替えの DOCS中間バイト2/15 を含めるとしていました。 ISO/IEC 10646 は標準的なエスケープシーケンスISO/IEC 2022 に復帰しますが、 詰め込みオクテットがある 制御文字. 同型符号化 ために、標準的なエスケープシーケンスビット組合せ自体が出現するとは限りません。 そのために 2/15 が入っています >>18

[47] UTF-8 ではエスケープシーケンスビット組合せISO/IEC 2022 の場合と等しくなります。 従ってこの理由なら 2/15 は不要なはずで、 実際に実装水準なしのエスケープシーケンス2/15 が省かれていますが、 実装水準ありのエスケープシーケンスには入っています。 そして実装水準ありの方はオクテットの詰め込みを行うと規定され (実質無変換)、 なしの方は詰め込みを行わないと規定していました >>42。 この違わない違いが生じた理由は不明です。 (UTF-1 は詰め込みを行うとしていました >>53 が、 UTF-1 でもエスケープシーケンスビット組合せは等しく、 2/15 は入っていませんでした。)

[37] ISO/IEC 10646 状態でエスケープシーケンス制御シーケンスで変更した状態が、 ISO/IEC 2022 に移行した後や、 その後で再び ISO/IEC 10646 に戻った時にも維持されているのかどうかはよくわかりません。

[48] ISO/IEC 10646 に切り替えた直後に 0xFEFF が出現したとき、 BOM と解釈されるのか U+FEFF ZWNBSP と解釈されるのか不明です。

[78] ISO/IEC 10646符号化文字のストリーム (未定義語) の最初に BOM を置けると定めています。 DOCS により ISO/IEC 10646 に遷移した直後が符号化文字のストリームの始めに当たるのかどうかは不明です。

[77] ISO/IEC 10646 にも ISO-IR にもエスケープシーケンス後のエンディアンの規定がなく、 どう解釈するべきか不明です。

[49] UTF-8 での復帰の表現は ISO/IEC 2022 の「standard return」と 同じです。実際実装水準指定なしの UTF-8 は ESC % G で standard return に分類されてます。 ISO/IEC 10646-1 を読んでも理由は釈然としません。 (実装水準ありの方では復帰が使えないとかではなさげ。)

[50] ISO-IR では UCS-2, UCS-4 は ISO/IEC 10646-1:1993 となってますが、 以降の版や ISO/IEC 10646-2 でも同じのようです。 (以上 ISO/IEC10646-1 2000 15,16, C.5, D.6)

[52] ISO-IR に登録された制御文字集合図形文字集合単独制御機能は、 ISO-IR に完全に登録され掲載されていましたから、 改正で変更があったときは新版が旧版とは別に登録され直すことになっていました。 ところが ISO/IEC 10646ISO/IEC 2022 ではない符号化システムへの切り替えのためのエスケープシーケンスとして登録されているので、 図形文字集合として登録されていませんし、 版に関わらず使えるようです。 (ISO/IEC 10646 は非互換変更を繰り返しているので、 バージョンごとにエスケープシーケンスを登録しなおしていたら何十個にもなっていそうです。)

[66] ISO-IR に最初に登録されてから現在に至るまで、 文字の追加のような互換性への影響の小さな変更以外にも、 次のような深刻な非互換変更が加えられています。

NOTE - Escape sequence ESC 02/05 04/00 is normally used for return to the restored state of ISO/IEC 2022. The escape sequence ESC 02/05 04/00 specified here is sometimes not exactly as specified in ISO/IEC 2022 due to the presence of padding octets. For this reason the escape sequences in 16.2 for the identification of UCS include the octet 02/15 to indicate that the return does not always conform to that standard.

[51] ISO/IEC 2022 から ISO/IEC 10646 に移って、再び ISO/IEC 2022 に戻った時に、状態は復元されるのかどうか。 はっきりと書かれてはいないようですが、上の引用文 (ISO/IEC 10646-1:2000 16.5 の参考) が復元されることをほのめかしているように思えます。


[23] ISO/IEC 10646 は、 制御シーケンス IUCS で、 ISO/IEC 10646 が定める部分集合を識別できるとしていました。 ISO/IEC 6429 符号化文字データ要素中でも ISO/IEC 10646 符号化文字データ要素中でも利用できるとしていました。 >>18

[24] ISO/IEC 6429 符号化文字データ要素中での利用が想定された理由は謎です。 ISO/IEC 2022 状態で使ってから ISO/IEC 10646指示しても、状態は保持されるのでしょうか。

[25] ISO/IEC 10646 は、 ISO/IEC 10646 と併用する制御機能の識別に、 ISO/IEC 2022 における制御文字集合指示シーケンスと同じ形の識別シーケンスが使えるとしていました。 ISO/IEC 6429 符号化文字データ要素中でも ISO/IEC 10646 符号化文字データ要素中でも利用できるとしていました。 >>18

[28] JIS X 0211 制御機能はそれぞれ 4/0, 4/3F として使います。それ以外は ISO-IR に登録された終端バイトとします。 >>18

[29] ISO/IEC 2022 符号化文字データ要素中での利用が想定された理由は謎です。 ISO/IEC 2022 状態で使ってから ISO/IEC 10646指示しても、状態は保持されるのでしょうか。
[63] この説明は IRR に言及していませんが、使ってもかまわないのでしょうか。 使うなとは書いていないようですが。。。

その他文字コード体系におけるエスケープシーケンス

[71] MS-DOSWindowsコマンドプロンプト等では、 その実装するコードページにおいて、 いわゆる ANSIエスケープシーケンスとして一部のエスケープシーケンスが利用できます。

関連

[6] C1エスケープシーケンスとして表す場合、 CSI で始まる制御シーケンス全体をエスケープシーケンスと呼ぶことがあります。