[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:08250] Re: 質問: ISO-2022-JP における7ビットカタカナ



おおいわです。

>> On Wed, 8 May 2002 01:38:15 +0900, fukushi <fukushi@xxxxxxxxxxxxxxxxxx> said:

fukushi> ISO-2022-JP は、ISO-2022 の4面全部が7ビット1文字のカナ
fukushi> (JIS X 0201 片仮名、いわゆる半角カナ)
fukushi> 以外に割り当てられており、
fukushi> いわゆる半角カナは「存在しない」ので使用できない、
fukushi> と覚えていましたが、実際には xyzzy や Emacs(mule)をはじめ、
fukushi> 多くのエディタで ESC(I をエスケープシーケンスとして
fukushi> 半角カナが使えます。
fukushi> このエスケープシーケンス、およびいわゆる半角カナのコード表は、
fukushi> 何の規格で定められているのでしょうか。

いくつか誤解があるようですが、ISO-2022-JP で用いる
ISO 2022 の割り当て面は G0 の1つのみで、この1面に
エスケープシーケンスで4つの文字集合を交互に割り当てて
使用します。この辺りの構造は、例えば ITO Takayuki 氏の
「文字コードの話」 http://euc.jp/i18n/charcode.ja.html#chap4 や、
他にもインターネット上にいくつか詳しい文献があります。

ご質問の件については、いわゆる「半角カタカナ」を規定しているコード表は
まさに JIS X 0201 (の右半分) です。また、ESC ( I の最後の I は、
ISO の登録簿に登録されているこの文字集合を示す終端記号です。
ESC ( ?? は「94文字集合をG0に呼び出す」ISO 2022 のシーケンスですから、
これ全体で「X 0201 のカナ集合を G0 面に呼び出す」ことを示します。

一方 ISO-2022-JP は RFC 1468 (ftp://ftp.nic.ad.jp/rfc/rfc1468.txt)
で規定されていますが、これを ISO 2022 的な解釈をする際の
4面の初期割り当ては

  G0 → ASCII、G1〜G3 → なし(使用禁止)

です。これに加えて、ISO-2022-JP では、使用できる
エスケープシーケンスを (したがって文字集合も) 次の物に
制限しています。

(RFC 1468 より引用)
>        Esc Seq    Character Set                  ISOREG
> 
>        ESC ( B    ASCII                             6
>        ESC ( J    JIS X 0201-1976 ("Roman" set)    14
>        ESC $ @    JIS X 0208-1978                  42
>        ESC $ B    JIS X 0208-1983                  87

これらはいずれも該当する文字集合を G0 に呼び出すシーケンスですが、
ここに JIS X 0201-1976 Kana set が (意図的に) 含まれていないので、
韓国語などの他の文字集合と同様に、「半角カタカナ」も使えないわけです。

しかし、現実には ShiftJIS 文字コード系との互換性などから
X 0201 のカタカナを (X 0208 のカタカナとは区別して) 扱いたい
と言う需要は存在するので、いくつかの拡張が存在しています。
例えば G1 → X0201カタカナ集合 とみなして SI/SO を用いる表現や、
G1 集合を 8bit コードを用いて表す流儀もあるようです。
それらのなかで ESC ( I を用いた表現は、
G0 のみを切替えて使うという ISO-2022-JP の設計に準拠している点と、
初期割り当て集合を拡張していないと言う2点において、
ISO-2022-JP のもっとも自然な拡張方法と言えるかと個人的には思います。

-- 
大岩 寛   Yutaka Oiwa            東京大学大学院 情報理工学系研究科
                          コンピュータ科学専攻 博士課程 米澤研究室
                    <oiwa@xxxxxxxxxxxxxxxxxxxxx>, <yutaka@xxxxxxx>
PGP fingerprint = C9 8D 5C B8 86 ED D8 07  EA 59 34 D8 F4 65 53 61

Index Home