[51] ISO/IEC 2022 において文字集合を利用可能な状態に指定することを指示といいます。
備考 図形文字集合を G0, G1, G2 及び G3 の各要素として識別すること、及び制御機能集合を C0 及び C1 の各要素として識別することを、この規格では
指示という。 集合の指示は、指示機能 (7.4 参照) 又は他の方法 (10.2 参照) で行ってよい。 JIS X 0202:1998 表1
[52] 指示する (to designate) 文字集合を、即座にまたは更に他の 制御機能が出現してから、所定の方法で表現出来るように 指定すること。 JIS X 0211-1994 4.2.31
[6] 文字集合を指示するエスケープ・シーケンスを、 指示シーケンスといいます。
[54]
CZD
,
C1D
は、制御文字集合をそれぞれ C0, C1 に指示すると同時に、
CL, CR or ESC Fe に呼び出します。
ESC
%x21 F ;; C0-DESIGNATE ISO/IEC2022 1994 14.2.2ESC
%x22 F ;; C1-DESIGNATE ISO/IEC2022 1994 14.2.3[55] GnDm, GnDMm は、図形文字集合をそれぞれ G0 〜 G3 に指示します。シフト状態によってはこれが同時に GL や GR への呼び出しとなることもあります。 SELECT-DRCS 指示子を併用可能です。
[1]
なお、ISO-IR の登録について、
エスケープシーケンスが登録されたとみなすのか、
終端バイトが登録されたとみなすのか、
という仕様の解釈論の問題があります。
[84] エスケープシーケンス登録説に立つと、古い登録はその後改訂されていないので、 旧仕様時代に登録された終端バイトは新しい指示シーケンス構文が使えないことになってしまいます。 普通この解釈は否定されています。
[140] 例えば >>139 の時代は G0 指示と G1 指示の2つだけしか登録簿には書かれていませんが、 他に指示できないとは解されていません。
[110] DECの文字コードの古い仕様で 94集合の指示シーケンス + 私用終端バイトで 942集合を指示できる例があります。
[108]
その他に
VT
等では非標準のエスケープシーケンスによる指示が数種類あります。
[33] 第2 or 第3中間バイトだけでは終端バイトが足りなくなった時に、 02/01 〜 02/03 を1つ使って、例えば ESC 02/08 02/01 04/00 で G0 に94図形文字集合を指示出来ます。
[66] 俗にそれぞれ2周目、3周目、4周目のような呼ばれ方をすることがありました。
[72] 指示シーケンスは指示する文字集合に属する文字のバイト数によって変わります。
[74] 図形文字集合は 8F - 15F のエスケープシーケンスを使うと1バイト (94集合、96集合) です。
[75] 図形文字集合は 4F のエスケープシーケンス GnDMm を使うと2バイト以上 (複数バイト集合) です。
[56] GnDMm では、何バイトの文字集合かが F の値で定まります。 (ISO/IEC2022 1994 14.3.3)
F | バイト数 |
---|---|
03/* | 2以上 |
04/* | 2 |
05/* | 2 |
06/* | 3 |
07/* | 4以上 |
[76] 登録済みの複数バイト集合のエスケープシーケンスは終端バイト F によって2バイト集合、3バイト集合を区別できます。
[77] ところが4バイト以上は「以上」でまとめられてしまっていて、 終端バイト F だけを見ても何バイトかわかりません。
[78] 私用の終端バイトも2バイト「以上」とされていて、 終端バイト F だけを見ても何バイトかわかりません。
[79] この仕様のために、未知の終端バイトが出現したとき、 >>77、>>78 の終端バイトだったとき、 それ以後の符号化文字データ要素を正しく解釈できるとは限らなくなってしまいます。
[80] バイト数が偶数か奇数かもわかりませんから、 未知の終端バイトが出現したら、以後未知の1バイト集合と同じように処理するのがいいでしょうか。
[81] 単独シフトが使われてしまうと、その直後の文字が何バイトか確定できない以上、 その続きも未知の1バイト集合として処理せざるを得なくなります。
[106]
DRCS にも終端バイトによるバイト数の規定が適用されると思われます。
[107]
空集合 7/14
にも適用されるのかは不明です。
[14] 1F
型エスケープ・シーケンスは、
符号化制御機能基本集合 (C0 集合) の指示
(C0-DESIGNATE
)
に使われます。
[15] 仕様書:
[16] 構文:
エスケープ・シーケンス /= 1F 型エスケープ・シーケンス
1F 型エスケープ・シーケンス := C0-DESIGNATE / 1F 型予約エスケープ・シーケンス
C0-DESIGNATE := 標準 C0-DESIGNATE / 私用 C0-DESIGNATE ;; C0-DESIGNATE
標準 C0-DESIGNATE := ESC
%x21 [%x21-23 *I] Ft
私用 C0-DESIGNATE := ESC
%x21 *I Fp
1F 型予約エスケープ・シーケンス := ESC
%x21 (%x20 / %x24-2F) *I Ft
I := %x20-2F ;; 中間バイト
Fp := %x30-3F ;; 私用終端バイト
Ft := %x40-7E ;; 標準終端バイト
[17] 2F
型エスケープ・シーケンスは、
符号化制御機能補助集合 (C1 集合) の指示
(C1-DESIGNATE
)
に使われます。
[18] 仕様書:
[19] 構文:
エスケープ・シーケンス /= 2F 型エスケープ・シーケンス
2F 型エスケープ・シーケンス := C1-DESIGNATE / 2F 型予約エスケープ・シーケンス
C1-DESIGNATE := 標準 C1-DESIGNATE / 私用 C1-DESIGNATE ;; C1-DESIGNATE
標準 C1-DESIGNATE := ESC
%x22 [%x21-23 *I] Ft
私用 C1-DESIGNATE := ESC
%x22 *I Fp
2F 型予約エスケープ・シーケンス := ESC
%x21 (%x20 / %x24-2F) *I Ft
I := %x20-2F ;; 中間バイト
Fp := %x30-3F ;; 私用終端バイト
Ft := %x40-7E ;; 標準終端バイト
[67] 4F
型エスケープ・シーケンスは、
複数バイト集合の指示に使われます。
[68] 仕様書:
[69] 第2中間バイトの割当て:
ISO/IEC 2022 では
G0-DESIGNATE MULTIBYTE 96-SET
はありません。
[70] 構文:
エスケープ・シーケンス /= 4F 型エスケープ・シーケンス
4F 型エスケープ・シーケンス := 標準複数バイト指示 / 標準互換複数バイト指示 / 再定義可能複数バイト指示 / 私用複数バイト指示 / 4F 型予約エスケープ・シーケンス
標準複数バイト指示 := ESC
%x24 (%x28-2F) [%x21-23 *I] Ft − ESC
%x24 %x28 (%x40-42)
標準互換複数バイト指示 := ESC
%x24 (%x40-42) ;; JIS 表4 備考
再定義可能複数バイト指示 := ESC
%x24 (%x28-2F) %x20 *I F
私用複数バイト指示 := ESC
%x24 (%x28-2F) *I Fp
4F 型予約エスケープ・シーケンス := <ESC
%x24 *I Ft で以上に該当しないもの>
I := %x20-2F ;; 中間バイト
Fp := %x30-3F ;; 私用終端バイト
Ft := %x40-7E ;; 標準終端バイト
F := Fp / Ft ;; 終端バイト
[126] SoftBank絵文字の独自仕様のエスケープシーケンス (シフトJISやISO-2022-JPと混在させる) は、
形式。 F は
4/5 (E) 4/6 (F) 4/7 (G)
4/15 (O) 5/0 (P) 5/1 (Q)
の6種類。
このエスケープシーケンスの後に利用できるのは94集合よりも小さな1バイト符号。
[127] 偶然にも ISO-IR に登録された旧型 G0 エスケープシーケンスとは衝突していないので同時実装はぎりぎり可能。
[20] 8F
型エスケープ・シーケンスは、
94文字集合の G0 への指示
(G0-DESIGNATE 94-SET
)
に使われます。
[21] 仕様書:
[22] 構文:
エスケープ・シーケンス /= 8F 型エスケープ・シーケンス
8F 型エスケープ・シーケンス := G0D4 / 8F 型予約エスケープ・シーケンス
G0D4 := 標準 G0D4 / 再定義可能 G0D4 / 私用 G0D4 ;; G0-DESIGNATE 94-SET
標準 G0D4 := ESC
%x28 [%x21-23 *I] Ft
再定義可能 G0D4 := ESC
%x28 %x20 *I F
私用 G0D4 := ESC
%x28 *I Fp
8F 型予約エスケープ・シーケンス := ESC
%x28 (%x24-2F) *I Ft
I := %x20-2F ;; 中間バイト
F := Fp / Ft ;; 終端バイト
Fp := %x30-3F ;; 私用終端バイト
Ft := %x40-7E ;; 標準終端バイト
[23] 9F
型エスケープ・シーケンスは、
94文字集合の G1 への指示
(G1-DESIGNATE 94-SET
)
に使われます。
[24] 仕様書:
[25] 構文:
エスケープ・シーケンス /= 9F 型エスケープ・シーケンス
9F 型エスケープ・シーケンス := G1D4 / 9F 型予約エスケープ・シーケンス
G1D4 := 標準 G1D4 / 再定義可能 G1D4 / 私用 G1D4 ;; G1-DESIGNATE 94-SET
標準 G1D4 := ESC
%x29 [%x21-23 *I] Ft
再定義可能 G1D4 := ESC
%x29 %x20 *I F
私用 G1D4 := ESC
%x29 *I Fp
9F 型予約エスケープ・シーケンス := ESC
%x29 (%x24-2F) *I Ft
I := %x20-2F ;; 中間バイト
F := Fp / Ft ;; 終端バイト
Fp := %x30-3F ;; 私用終端バイト
Ft := %x40-7E ;; 標準終端バイト
[26] 10F
型エスケープ・シーケンスは、
94文字集合の G2 への指示
(G2-DESIGNATE 94-SET
)
に使われます。
[27] 仕様書:
[28] 構文:
エスケープ・シーケンス /= 10F 型エスケープ・シーケンス
10F 型エスケープ・シーケンス := G2D4 / 10F 型予約エスケープ・シーケンス
G2D4 := 標準 G2D4 / 再定義可能 G2D4 / 私用 G2D4 ;; G2-DESIGNATE 94-SET
標準 G2D4 := ESC
%x2A [%x21-23 *I] Ft
再定義可能 G2D4 := ESC
%x2A %x20 *I F
私用 G2D4 := ESC
%x2A *I Fp
10F 型予約エスケープ・シーケンス := ESC
%x2A (%x24-2F) *I Ft
I := %x20-2F ;; 中間バイト
F := Fp / Ft ;; 終端バイト
Fp := %x30-3F ;; 私用終端バイト
Ft := %x40-7E ;; 標準終端バイト
[29] 11F
型エスケープ・シーケンスは、
94文字集合の G3 への指示
(G3-DESIGNATE 94-SET
)
に使われます。
[30] 仕様書:
[31] 構文:
エスケープ・シーケンス /= 11F 型エスケープ・シーケンス
11F 型エスケープ・シーケンス := G3D4 / 11F 型予約エスケープ・シーケンス
G3D4 := 標準 G3D4 / 再定義可能 G3D4 / 私用 G3D4 ;; G3-DESIGNATE 94-SET
標準 G3D4 := ESC
%x2B [%x21-23 *I] Ft
再定義可能 G3D4 := ESC
%x2B %x20 *I F
私用 G3D4 := ESC
%x2B *I Fp
11F 型予約エスケープ・シーケンス := ESC
%x2B (%x24-2F) *I Ft
I := %x20-2F ;; 中間バイト
F := Fp / Ft ;; 終端バイト
Fp := %x30-3F ;; 私用終端バイト
Ft := %x40-7E ;; 標準終端バイト
[38] 12F
型エスケープ・シーケンスは、
96文字集合の G0 への指示
(G0-DESIGNATE 96-SET
)
に使われます。
[39] ISO/IEC 2022 ではこの型は将来の拡張のために予約されています。
[40] 仕様書:
[41] 構文:
エスケープ・シーケンス /= 12F 型エスケープ・シーケンス
12F 型エスケープ・シーケンス := G0D6 / 12F 型予約エスケープ・シーケンス
G0D6 := 標準 G0D6 / 再定義可能 G0D6 / 私用 G0D6 ;; G0-DESIGNATE 96-SET
標準 G0D6 := ESC
%x2C [%x21-23 *I] Ft
再定義可能 G0D6 := ESC
%x2C %x20 *I F
私用 G0D6 := ESC
%x2C *I Fp
12F 型予約エスケープ・シーケンス := ESC
%x2C (%x24-2F) *I Ft
I := %x20-2F ;; 中間バイト
F := Fp / Ft ;; 終端バイト
Fp := %x30-3F ;; 私用終端バイト
Ft := %x40-7E ;; 標準終端バイト
[42] 13F
型エスケープ・シーケンスは、
96文字集合の G1 への指示
(G1-DESIGNATE 96-SET
)
に使われます。
[43] 仕様書:
[44] 構文:
エスケープ・シーケンス /= 13F 型エスケープ・シーケンス
13F 型エスケープ・シーケンス := G1D6 / 13F 型予約エスケープ・シーケンス
G1D6 := 標準 G1D6 / 再定義可能 G1D6 / 私用 G1D6 ;; G1-DESIGNATE 96-SET
標準 G1D6 := ESC
%x2D [%x21-23 *I] Ft
再定義可能 G1D6 := ESC
%x2D %x20 *I F
私用 G1D6 := ESC
%x2D *I Fp
13F 型予約エスケープ・シーケンス := ESC
%x2D (%x24-2F) *I Ft
I := %x20-2F ;; 中間バイト
F := Fp / Ft ;; 終端バイト
Fp := %x30-3F ;; 私用終端バイト
Ft := %x40-7E ;; 標準終端バイト
[45] 14F
型エスケープ・シーケンスは、
96文字集合の G2 への指示
(G2-DESIGNATE 96-SET
)
に使われます。
[46] 仕様書:
[47] 構文:
エスケープ・シーケンス /= 14F 型エスケープ・シーケンス
14F 型エスケープ・シーケンス := G2D6 / 14F 型予約エスケープ・シーケンス
G2D6 := 標準 G2D6 / 再定義可能 G2D6 / 私用 G2D6 ;; G2-DESIGNATE 96-SET
標準 G2D6 := ESC
%x2D [%x21-23 *I] Ft
再定義可能 G2D6 := ESC
%x2D %x20 *I F
私用 G2D6 := ESC
%x2D *I Fp
14F 型予約エスケープ・シーケンス := ESC
%x2D (%x24-2F) *I Ft
I := %x20-2F ;; 中間バイト
F := Fp / Ft ;; 終端バイト
Fp := %x30-3F ;; 私用終端バイト
Ft := %x40-7E ;; 標準終端バイト
[48] 15F
型エスケープ・シーケンスは、
96文字集合の G3 への指示
(G3-DESIGNATE 96-SET
)
に使われます。
[49] 仕様書:
[50] 構文:
エスケープ・シーケンス /= 15F 型エスケープ・シーケンス
15F 型エスケープ・シーケンス := G3D6 / 15F 型予約エスケープ・シーケンス
G3D6 := 標準 G3D6 / 再定義可能 G3D6 / 私用 G3D6 ;; G3-DESIGNATE 96-SET
標準 G3D6 := ESC
%x2F [%x21-23 *I] Ft
再定義可能 G3D6 := ESC
%x2F %x20 *I F
私用 G3D6 := ESC
%x2F *I Fp
15F 型予約エスケープ・シーケンス := ESC
%x2F (%x24-2F) *I Ft
I := %x20-2F ;; 中間バイト
F := Fp / Ft ;; 終端バイト
Fp := %x30-3F ;; 私用終端バイト
Ft := %x40-7E ;; 標準終端バイト
[122]
制御文字集合、図形文字集合のどちらの場合も、
指示シーケンスの直前に文字集合の改訂 (更新)
を表す文字集合改訂番号を指定する
IRR
を使えます。
[142]
なお、
IRR
導入前に改訂番号なし、終端バイトそのままで
ISO-IR
登録簿の文字集合が変更された事例がいくつかあります。
[137]
94集合 6/4 は図形文字が新規追加されて上書き登録されました。
[115] JIS X 0201 の片仮名用図形文字集合とラテン文字用図形文字集合は ISO-IR に正式に登録される前に終端バイト 4/7 (G), 4/8 (H) が使われ始めましたが、他の図形文字集合が先に登録されてしまい、 正式には 4/9 (I), 4/10 (J) になりました。 >>149
[116] JUNETコードやRFC 1468 ISO-2022-JPはこれを使うべきではないとしています (がそれ以前には使われていました)。
[118] 古くからの日本向け ISO/IEC 2022 実装や JUNETコード/ISO-2022-JP (およびその派生) の実装は JIS X 0201 ラテン文字用図形文字集合とみなします。
[117] DECの文字コードの ISO/IEC 2022 の実装はこれを受け付けます (が出力に使いません)。
[119]
最近の ISO-2022-JP の実装や Encoding Standard の
iso-2022-jp
はこれに対応していません。
[136] KS X 1002 は942集合の終端バイト 4/5, 4/6 を独自の意味で使っています。
[91]
ISO-IR に登録されている94文字集合の終端バイトのうち、
次のものは
VT や DEC-PPL
で独自の意味で使われており、用法が衝突しています。
[95]
VT
では、
ESC
2/8 3/1,
ESC
2/9 3/1,
ESC
2/9 4/2
が指示とは違う意味で使われることがありました。
[3] ARIB STD-B24 は終端バイト 07/00 を1バイトの 「マクロ符号」に使っています。マクロ符号はマクロ文で構成される94集合です。 マクロ文は、図形文字や制御文字の列を表すものです。 Japanese Basic Hand-printed Graphic Set for OCR JIS C6229-1984 と衝突していますが...
[134]
NAPLPS
は94集合用指示シーケンスの終端バイト
5/7,
7/10,
7/11,
7/13,
2/0 7/10,
2/0 7/11
を96集合用に使っていました。後に
96集合用指示シーケンスに変更されました。
5/7, 7/10, 7/11, 7/13 のいずれも ISO-IR では無関係の図形文字集合が登録されています。
[141] NATS は94集合で 2/0 の空白の意味も定めています。
[145] DRCSTerm は 94集合用指示シーケンスで DRCS 96集合を表しています。
[86]
94n集合は ESC
2/4 2/8 F
で G0 に指示できますが、過去の版の ISO 2022
では
ESC
2/4 F
と定められていました。
[87] 古い ISO 2022 では 94n文字集合は G0 にしか指示出来ませんでした。その時の名残でこれらの3つの文字集合を G0 に指示する時は 02/08 を省きます。ここで 02/08 を挟むと 厳密には ISO/IEC 2022 に適合しません。 (JISX0202:1998 13.2.3 備考)
[88]
この点で X の CompoundText や
ISO-2022-ESC B
は
ISO/IEC 2022
に適合しません。
これらは常に
2/8 を含めた長い方のみを使うと定めています。
[138] ISO/IEC 2022指示シーケンスの多くに対応している実装の多くは、 2/8 の有無に関わらず読み込むことができるようです。 ISO-2022-JP 専用の実装など限定的な実装は読み込みに対応していないことが多いようです。
[89]
ESC
2/4 Fp (私用) や
ESC
2/4 7/14 (空集合)
は昔は使えたのでしょうか?
現行仕様上は認められないようにみえますが。
[133]
MARC-8 は旧仕様に基づいていました。
943集合 EACC のための私用終端バイト
3/1
は
G0 のとき ESC
2/4 3/1 と表すように読めます。
>>130
[100]
ESC
2/4 Fp は初期の ISO 2022
では認められていたようです。
(当時は空集合はなかった。)
[105]
94n集合が G0 だけでなく G1, G2, G3
に指示できるようになったばかりの頃の ISO 2022
では、
G0 だけ ESC
2/4 F
を使うと定められていました。
(ESC
2/4 2/9 F などはあったのに、
ESC
2/4 2/8 F だけありませんでした.)
>>103
[121] 3つの集合だけ特別扱いなのは、 ISO/IEC 2022 にそう規定されているからです。 ISO-IR に登録されたエスケープシーケンスがそうであることに根拠を求める説もありましたが、 その説を取ると他に矛盾が生じてきます (>>84)。
[37] 96文字集合は 2/12, 2/13, 2/14, 2/15 でそれぞれ G0, G1, G2, G3 に指示できます。
[62] このうち 2/12 は現在の ISO/IEC 2022 で規定されていません (>>39) が、 一部で実装されています >>85。
[63] 元々96文字集合は右側に呼び出しする前提で作られた経緯があるようで、 G0 に指示するのは適切でないと考えられていたらしいです。
[64]
96文字集合が左側に呼び出しされると、
2/0 や 7/15
が
SP
や DEL
でなく96文字集合の文字を表すことになります。
それが G0 への指示が忌避される一因だといいます。
[65] 一方で固定シフトや単独シフトを使って G1, G2, G3 が左側に呼び出しされることは ISO/IEC 2022 も認めています。それなら G0 だけ避ける意味もなく、 一貫しているほうがいいだろうと 2/12 を実装することもあったようです。
[71] 同じ理由で96n文字集合を指示する 2/4 2/12 も ISO/IEC 2022 にはないのですが、一部で実装されています >>85。
[98]
実は96集合がなかった初期の ISO 2022 では
ESC
2/11 F >>97, >>102,
ESC
2/12 F >>97, >>102,
ESC
2/13 F >>102,
ESC
2/14 F >>102
も94集合用でした。
[104]
複数バイト集合も、
ESC
2/4 2/11 F,
ESC
2/4 2/12 F,
ESC
2/4 2/13 F,
ESC
2/4 2/14 F
が94n集合用とされた時代がありました。
>>103
[99] 2/11 - 2/14 を使って ISO-IR に登録された94集合, 94n集合はありませんでした。 Fp は当時から存在したので、 私用図形文字集合が使われなかったとも断言できません。 左側に呼び出ししたときの 2/10 と 7/15 の解釈が旧仕様と新仕様で非互換に変化しています。
[111]
DECの文字コードの一種では、96集合がいくつかあるうちの私用終端バイト
3/12 User Preference Supplemental
は互換性のため94集合が割り当てられているとされます。
[131]
Videotex の一部仕様や仕様書の記述には当時の規定の影響がみられます。
[132] MARC-8 の仕様書の記述には当時の規定の影響がみられます。 >>140
[34] ESC <I> 5/7 は ISO-IR で、 CCITT が以前に使用していたから割り当てないと書いてあります。 (未登録のまま使ってたってことですか?)
[128] ESC
I 5/7
は、 NAPLPS, T.101
で使います。これが公式に登録されずに、その終端バイトには割り当てないことになったのは、その集合が図形文字集合ではなかったからでしょう。
[135]
NAPLPS は96集合用の指示シーケンスの終端バイト
5/7,
7/13,
7/10,
7/11,
2/0 7/10,
2/0 7/11
を使っていました。
5/7 は ISO-IR に登録されていませんが、予約されています。
7/10, 7/11 は ISO-IR に登録されていません。 (幸い、他に登録されていません。) DRCS という扱いに変更されて、 中間バイト 2/0 を伴う仕様に変わりました。
[8] ISO/IEC 2022 に基づく符号体系は普通は初期状態でいくつかの符号化文字集合を指示した状態と定義されています。 例えば日本語EUCでは G0 に ASCII が、 G1 に JIS X 0208 が指示された状態となっています。
[9] ISO/IEC 2022 単体において、指示がないときの初期状態がどうなっているのか、 あまり明確ではありません。 空集合が指示されている場合のような、 それに属するどのビット組合せも使用禁止の状態と解するべきなのでしょうか。
[10]
なおC0集合については、固定符号化文字 ESCAPE
のみは始めから利用可能な状態と規定されています。
[7] SGML では、これをASCII文字で表記した公開テキスト指示シーケンスも使われました。
[109]
DEC製品で指示シーケンスの ESC
以外の部分を独自の制御コマンドの一部に使った例がありました。
[123] Arena wchar は上位ビットに終端バイト等を、 下位ビットにその符号化文字集合のビット組合せを使っていました。
[90] 中間バイトと終端バイトは ISO 2022 wchar_t encoding 案で使われました。
[124] registry - xorg/doc/xorg-docs - X.org xorg-docs documentation. (mirrored from https://gitlab.freedesktop.org/xorg/doc/xorg-docs), , https://cgit.freedesktop.org/xorg/doc/xorg-docs/tree/registry#n1224
[125]
ISO/IEC 2022 の符号構造に合致した符号化文字集合であっても、
公式な終端バイトが存在しないなどの理由で指示シーケンスの利用が憚られる場合に、
DOCS
が利用されることがあります。