[7] エスケープシーケンスは、
ESCAPE
から始まり、0個以上の中間バイトと1つの終端バイトによって構成されるバイト列です。
ISO/IEC 2022 符号拡張法に従う文字集合の指定や、
制御機能の呼び出しなどに用います。
[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。
(12F
は ISO/IEC 2022 では予約)
[8] 00/00〜01/15, 07/15〜15/15 が誤って含まれた場合 応用は誤り状態の識別手段及び誤り状態からの回復手段を 提供する必要があるかもしれませんが、その様な要件は ISO/IEC 2022 の範囲外とするとされています。 (JISX0202:1998 13.1 備考参照。)
[1] >>8 エスケープ・シーケンスに出現し得ないバイトが出てきた場合だけでなく、未知のエスケープ・シーケンスが出てきた場合の回復はどうですかね? これも実装依存ですかね?
[72] ISO/IEC 2022 の符号構造に基づく符号は無数に存在し、 その形態も様々ですが、その中には ISO/IEC 2022エスケープシーケンスや固定シフトを使って状態を切り替える特徴を有する一連の符号群が存在しています。
[73] 歴史的に各社の Unix の多くはこの種の符号を使っていました。 ロケールにより、またソフトウェアにより、 切り替えに使うエスケープシーケンスや固定シフトは少しずつ違いがあります。 また利用可能な符号化文字集合にも違いが大きいです。
[74]
Emacs は
iso-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
を実装しています。
[76] 符号化文字集合がある程度限定されたものに、 ISO-2022-JP の一族、 ISO-2022-CN の一族、 ISO-2022-KR、 ISO-2022-INT、 Compound Text、 ISO/IEC 4873、 VideotexString、 ARIB STD-B5、 T.61、 MARC-8 などがあります。
[89] Mosaic-L10N: User's Guide, , http://takadat.com/i/Mosaic-l10n/users.html#detection
[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/5 はC1制御文字なので、
そのような制御機能を含むC1集合が指示された状態、
と解釈すれば一応は ISO/IEC 2022 の枠内。
[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 による文字列の符号化の他にも、 次の場面でエスケープシーケンスが用いられます。
[79] KS X 6001:1990 のファイル内で使うエスケープシーケンス: ISO/IEC 6429 や VT のものと似ているが少し違う
[16]
ISO/IEC 10646
はエスケープシーケンスの用法を規定しています。
(Unicode には相当する規定がありません。)
[17]
ISO/IEC 2022 の符号拡張制御機能
(指示シーケンス、単独シフト、固定シフト)
の
ISO/IEC 10646
における利用は禁止されています。
この規定は曖昧ですが、
図形文字集合の指示と呼び出しによる
ISO/IEC 10646
の図形文字の符号位置の解釈の変更が禁止されているものとみられます。
[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
ESC
2/5 2/15 4/0 - UCS-2 実装水準1ESC
2/5 2/15 4/1 - UCS-4 実装水準14/2
は他に割り当てられているので注意ESC
2/5 2/15 4/3 - UCS-2 実装水準2ESC
2/5 2/15 4/4 - UCS-4 実装水準2ESC
2/5 2/15 4/5 - UCS-2 実装水準3ESC
2/5 2/15 4/6 - UCS-4 実装水準3ESC
2/5 2/15 4/7 - UTF-8 実装水準1ESC
2/5 2/15 4/8 - UTF-8 実装水準2ESC
2/5 2/15 4/8 - UTF-8 実装水準3ESC
2/5 2/15 4/10 - UTF-16 実装水準1ESC
2/5 2/15 4/11 - UTF-16 実装水準2ESC
2/5 2/15 4/12 - UTF-16 実装水準3ESC
2/5 4/2 - UTF-1ESC
2/5 4/7 - UTF-8 実装水準指定なし[46] なぜか UTF-8 (と UTF-1 >>53) だけ実装水準の指定がないものも用意されていました >>42 注記。 実装水準の存在意義が問われそうですが、 実際不要だったのでしょう。
[56] 実装水準が廃止され、 Unicode の符号化形式が侵略してからは、 次のような規定に変わっています。 >>55 (ISO/IEC 10646 の本文の規定だけで、 ISO-IR の登録は前のまま放置されています。)
ESC
2/5 2/15 4/9 - UTF-8ESC
2/5 2/15 4/12 - UTF-16BEESC
2/5 2/15 4/6 - UTF-32BEESC
2/5 4/7 - UTF-8ESC
2/5 2/15 4/0,
ESC
2/5 2/15 4/1,
ESC
2/5 2/15 4/3,
ESC
2/5 2/15 4/4,
ESC
2/5 2/15 4/7,
ESC
2/5 2/15 4/8,
ESC
2/5 2/15 4/10,
ESC
2/5 2/15 4/11 - 非推奨[64]
なお、古くからの実装で、
ESC
2/5 3/8
で UTF-8
を表すものもあります。
[32]
ISO/IEC 10646
は、
ISO/IEC 10646
から
ISO/IEC 2022
への切り替えに
ESC
2/5 4/0
を使うとしていました。
ISO/IEC 2022 符号化文字データ要素中でも
ISO/IEC 10646 符号化文字データ要素中でも利用できるとしていました。
>>18
[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
と解釈されるのか不明です。
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 10646 は ISO/IEC 2022 ではない符号化システムへの切り替えのためのエスケープシーケンスとして登録されているので、 図形文字集合として登録されていませんし、 版に関わらず使えるようです。 (ISO/IEC 10646 は非互換変更を繰り返しているので、 バージョンごとにエスケープシーケンスを登録しなおしていたら何十個にもなっていそうです。)
[66] ISO-IR に最初に登録されてから現在に至るまで、 文字の追加のような互換性への影響の小さな変更以外にも、 次のような深刻な非互換変更が加えられています。
[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
[25] ISO/IEC 10646 は、 ISO/IEC 10646 と併用する制御機能の識別に、 ISO/IEC 2022 における制御文字集合の指示シーケンスと同じ形の識別シーケンスが使えるとしていました。 ISO/IEC 6429 符号化文字データ要素中でも ISO/IEC 10646 符号化文字データ要素中でも利用できるとしていました。 >>18
[28] JIS X 0211 制御機能はそれぞれ
4/0
,
4/3
を
F
として使います。それ以外は ISO-IR に登録された終端バイトとします。
>>18
[71] MS-DOS や Windows のコマンドプロンプト等では、 その実装するコードページにおいて、 いわゆる ANSIエスケープシーケンスとして一部のエスケープシーケンスが利用できます。
[6] C1 をエスケープシーケンスとして表す場合、 CSI で始まる制御シーケンス全体をエスケープシーケンスと呼ぶことがあります。