[Edit][Create New]
[ IndexPage / ネットとプログラミング / web296 / No82.txt ]

No82.txt

さかさスラッシュの謎(その2)

さて、前回のバック(逆さ)スラッシュ問題では、シフトJISがASCIIの代わりに
ISO646を適用して、バックスラッシュの領域に円記号を割り当てているというこ
と、そのため、ASCIIを使用する地域(主に米国)と情報を交換したり、ASCII用の
キーボード(US-101キーボードなど)を使用した際、両者が混同することがあるこ
とを解説しました。今回は、シフトJIS以外の文字コード、特にInternetでよく使
われるShift_JIS、EUC-JP、ISO-2022-JPの3つについて、検証していこうと思いま
す。

まずはShift_JISから。独自規格のシフトJISとは違い、Shift_JISにはIANAによっ
て定義された仕様がちゃんと存在します。早速IANAのサイトから、定義を見てみ
ましょう。

http://www.iana.org/assignments/character-sets

Name: Shift_JIS (preferred MIME name)
Source: This charset is an extension of csHalfWidthKatakana by
adding graphic characters in JIS X 0208. The CCS's are
JIS X0201:1997 and JIS X0208:1997. The
complete definition is shown in Appendix 1 of JIS
X0208:1997.

ここで、Shift_JISはJIS X 0201とJIS X 0208を合わせた文字コードであると解説
されています。JIS X 0208がいわゆる2バイトコード、つまり平仮名や漢字など日
本特有の文字を集めた文字セットです。そして、JIS X 0201というのが、ASCIIを
元に円記号やいわゆる半角カタカナを拡張したいわゆる「半角文字」用の文字セッ
トとなっています。

ここの定義でわかるように、Shift_JISでは(半角の)バックスラッシュは存在せず、
円記号しか出すことができません。読者のみなさんのWebブラウザではどうでしょ
うか?

http://kaede.to/~canada/web296/charset.cgi?Shift_JIS

さて、残りの2つはどうでしょうか? 次はEUC-JPです。定義は同じくIANAのサイト
より。

Name: Extended_UNIX_Code_Fixed_Width_for_Japanese
Source: Used in Japan. Each character is 2 octets.
code set 0: US-ASCII (a single 7-bit byte set)
1st byte = 00
2nd byte = 20-7E

なんと、EUC-JPでは、JIS X 0201ではなく、ASCIIが使われているのです。つまり、
Shift_JISとは逆に、バックスラッシュのみで円記号は使うことができません。こ
の一点において、EUC-JPとShift_JISは実は相互変換が不可能なのです。これもブ
ラウザで確認してみましょう。ちゃんとバックスラッシュが出ていますか?

http://kaede.to/~canada/web296/charset.cgi?EUC

さて、最後のISO-2022-JPはどうでしょうか? バックスラッシュなのか円記号なの
か。実は驚くべき仕様がISO-2022-JPには用意されています。

http://www.ietf.org/rfc/rfc1468.txt
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

1行目と2行目に注目してください。なんとISO-2022-JPでは、ASCIIとJIS X 0201
の両方が使えるのです。つまり、バックスラッシュも円記号も両方とも表現可能
ということになります。

これも、ちゃんと用意してあります。以下が世にも珍しいバックスラッシュと円
記号の混在テキストです。

http://kaede.to/~canada/web296/charset.cgi?ISO-2022-JP

さて、どうでしょうか? 残念ながら筆者の環境では、3つの文字コードにおいて、
全て円記号しか表示されませんでした。それだけ なおざりにされている問題とい
うわけですが、厳密には簡単に円記号が出せるのはShift_JISだけで、
ISO-2022-JPではデフォルトがASCIIのため、通常のエディタなどで円記号を出す
のは困難であると思います。文字コード間の互換性なども考え合わせると、
ASCIIのバックスラッシュや、JIS X 0201の円記号はなるべく使わず、必要がある
場合はJIS X 0208(いわゆる2バイトコード)の「/」「¥」を使うようにするのが
良いかと思います。