2005-10-20

utf-8 の代わりに iso-2022-jp-2

テキストに複数言語を含めたい。そう思う人は多いと思う。ドイツ語のウムラウト、フランス語のセディーユ、スペイン語のひっくり返ったクエスチョン・マーク、ギリシア文字にキリル文字、そして朝鮮のハングルに中国の簡体字。世界には色んな言葉と文字が溢れていて、数えるだけでも一苦労。そんな沢山ある文字を一つの文字コード系で扱おう、という取り組みが Unicode で、そのエンコーディング・スキームの一つ utf-8 は耳にすることも多いと思う。今回は、有名な utf-8 ではなくて、iso-2022-jp-2 という耳なれないエンコーディング・スキームもあるよ、というお話。

具体的には何ができる?

iso-2022-jp-2RFC 1554 で定義されていて、英語と日本語の他に次の文字集合を扱うことができる。

ISO-8859-1
ラテン文字 1 (ドイツ語、フランス語、スペイン語などのアクセント付文字)
ISO-8859-7
ラテン文字 (ギリシア文字)
JIS X 0212-1990
日本語の補助漢字
GB2312-80
中国の簡体字 (俗に云う EUC-CN)
KS X 1001:1992
韓国語のハングル文字と漢字 (俗に云う EUC-KR)

Unicode ほど網羅的ではないけれども、Shift_JIS に比べれば扱える文字集合の数は雲泥の差。こんな面白いエンコーディング・スキームなのに、マイナーなのは勿体ない。それも、utf-8 一つで事足りてしまうからかもしれないけれど...

iso-2022-jp-2 のメリットとデメリット

iso-2022-jp は ISO 2022 のサブセットなので、ISO 2022 のお話をしませう。ISO 2022 の基本は、文字集合のエスケープ・シークエンスによる切り替え。デフォールトは英語で、エスケープ・シークエンスという制御文字を挟むことで、他の文字集合を使うようにする。

例えば、「ISO 2022 の subset」という一行は、次のようになる。

ISO 2022 (日)の(英) subset

ここで、 (日)(英) は各々、日本語と英語に切り替えるエスケープ・シークエンス。

JIS コードの俗称を持つ iso-2022-jp は、日本語と英語の切り替え用エスケープ・シークエンスを持っている。iso-2022-jp-2 は、iso-2022-jp のエスケープ・シークエンスに、中国・韓国・ラテン・ギリシア文字用のエスケープ・シークエンスを加えたものという位置付けになる。

つまり、iso-2022-jp-2 のメリットは、iso-2022-jp の上位互換なところ。iso-2022-jp-2 をサポートしているツールは少いけれど、iso-2022-jp (JIS コード) に対応しているツールは多い。だから、もし、iso-2022-jp-2 未サポートなツールでそのテキストを読んだとしても、日本語と英語の部分だけはちゃんと読める (何故なら、その部分は iso-2022-jp と変わらないから)。文字化けするのは、中国語やラテンの部分だけ。これは、日本語 (と英語) がメイン、だけど時折他の言語が混ざる文書で使う分には問題がない、ということ。日本人には、とても優しいエンコーディング・スキームだと思う。

一方、utf-8 未サポートなツールでテキストを読むと、英語の部分以外全て文字化けしてしまう。今はまだしも、二年前は utf-8 でファイルを保存するのには勇気が要った。

iso-2022-jp-2 のデメリットは、サポートしているツールが非常に少いこと。こればっかりは、しょうがないかな...

Emacs で iso-2022-jp-2

最新の Emacs (21.4) なら、iso-2022-jp-2 をサポートしている。ファイルを保存する前に、ファイルの coding system を iso-2022-jp-2 に設定すればいい。

C-x RET f RET iso-2022-jp-2 RET

次のコードをファイルの末尾に加えておくと、 Emacs はそのファイルを iso-2022-jp-2 なファイルとして扱う。

;;; Local Variables: ***
;;; coding: iso-2022-jp-2 ***
;;; End: ***

ちなみに、 Emacs の最新安定版 21.4 は、未だに Unicode (の日本語・中国語・韓国語) をサポートしていない。Unicode を使うには、MULE-UCS をインストールするか、開発版の Emacs を使うしかない。

後書き

ぼくは、自分の ChangeLog メモを iso-2022-jp-2 で保存している。メモの中には、本や映画の感想も書いていて、そこには原題も書くようにしている。すると、韓国映画やフランス文学の原題でハングルやラテン文字が出てきた。参った。昔は mule 2 しか入っていない古いマシンがあって、そこでも ChangeLog メモを開くことがあったので、Unicode は使えなかった。結局、古いマシンで読み書きするのはマシンの設定用のメモだけで、映画の感想は読まないのだから、iso-2022-jp-2 なら (ハングル等は文字化けするけど)、最低限の要は足せることに気づいて iso-2022-jp-2 にしたら上手くいった。

今でも、最新 Emacs が Unicode じゃないので、万一のために iso-2022-jp-2 のまま。開発版の Emacs が正式リリースされたら、utf-8 にかえるかもしれない。

.
.

No comments:

Post a Comment