文字コードとして昔から使われてきたものには、「ASCIIコード」や「EBCDICコード」、最近では「ISO-8859」などが世界的に使われています。また、日本に限って言えば、「JIS X 0208/0212/0213」という、いわゆる「JIS漢字」が古くから使われてきましたが、これを表現するための符号化方式として「ISO-2022-JP/Shift JIS/EUC」などが組み合わされて使われていたほか、最近はUnicodeも広く利用されるようになってきました。
さて、日本ではどうかというと、欧米とは少し異なる動きになっています。もともと日本語に関しては、「JIS X 0208(もとはJIS C 6226という名前でしたが、後に採番され直されました)」というコード体系(正式名称は「7ビット及び8ビットの2バイト情報交換用符号化漢字集合」)が1978年に規定されました。俗に「JIS第一/第二水準漢字」などと呼ばれていたものですが、これは文字集合に相当します。
このJIS X 0208は文字集合なわけですが、これに対応する符号化方式がまず混乱していました。インターネットやPC(MS-DOS)が普及する前から、コンピュータメーカー各社が独自の符号化方式で、JIS X 0208を取り扱えるようにしていました。
この時の符号化方式は、JIS X 0208に割り当てられていたコードをベースにしつつも、各メーカーが独自拡張が行なわれていた関係で、微妙に互換性がないという状況でした。それでもここまではJIS X 0208を大きく逸脱することはなかったのですが、状況が変わってきたのは、MicrosoftがMS-DOSの日本語化を行なった(*1)際に、Shift_JISと呼ばれる新しいコードを導入してからです。
Shift-JISは、ASCIIコードと両立するような形にコード体系を変更しており、海外で動作していたプログラムを日本語環境でそのまま動作させられるメリットを持っています。そして、MS-DOSやその後継であるWindows、一部のUNIXマシンなどで広範で使われる符号化方式として定着しており、その後に「JIS X 0208:1997」で公式に「シフト符号化表現」として仕様が定義されました。そしてその後には、「JIS X 0213」において「Shift_JISX0213」として標準規格としてのポジションを確立します。
さらに、「EUC-JP(Extended Unix Code)」と呼ばれる符号化方式も登場します。名前からもわかる通り、UNIXで利用されるための符号化方式で、規格を定めたのはAT&Tです。“-JP”という名前が語尾にあるのは、EUC自体はUNIXの多言語拡張を目指したもので、この日本語バージョンがEUC-JPという位置付けになります。
この3種類、つまりJIS X 0208もしくはその拡張版(これを「JIS漢字コード」と称するのが一般的)とShift_JIS、EUC-JPの符号化方式が一般に混在するという状況になりました。また、これに輪をかけているのが、文字集合の変遷です。先に述べたように基準になるのはJIS X 0208ですが、これ自体も以下のように4種類が存在します。
・1978年に登場した6,802文字(JIS C 6226-1978)
・1983年に登場した6,877文字(JIS C 6226-1983/JIS X 0208-1983)
・1990年に登場した6,877文字(JIS X 0202-1991)
・1997年に登場した6,879文字(JIS X 0208-1997)
一見、JIS X 0208-1983以降は大きな違いはないように思えるのですが、文字の入れ替えや例示字形の変更などが毎回行なわれたりもしました。また、JIS X 0208を補完する目的で「JIS X 0212」という補助漢字集合が1990年に制定されますが、このShift_JISではJIS X 0212が使えないという問題があり、これへの対応として「JIS X 0213」という新たな文字集合が2000年に登場(JIS X 0213-2000)、2004年に改定されています(JIS X 0213-2004)。JIS X 0213自体は、JIS X 0208-1997をベースに補助漢字などを大きく追加しもので、総文字数は11,223文字に達します。
これだけ文字集合が多いと、当然対応にも苦慮せざるを得ません。符号化方式の側にとっても、例えば「JIS X 0208に対応したShift_JIS」と言っても、それがどのJIS X 0208なのかによって文字が変わってきてしまうわけで、個別対応が結局必要になってしまいます。
一般にはこうした対応はOSによって変わってくるのが一般的です。例えば、Mac OS XはJIS X 0213-2000を、Windows XPではJIS X 0208-1997をベースとしています。どちらのOSも内部的にはUnicodeで表現していますが(Mac OS XはUTF-16、Windows XPはUTF-8と聞いています)、ファイルなどの書き出しにはShift_JISを使っています。これにより起きている現象が、続に言われる「機種依存文字」問題です。一見どちらも符号化方式はShift_JISですから共通に見えるのですが、文字集合が異なっていますから、同じ文字が表示されるとは限りません。
この問題は根が深く、しかも解決が難しいものです。登場したてのWindows VistaはJIS X 0213をベースとしたものに生まれ変わったので問題は大分解決するかのように見えますが、こちらはJIS X 0213-2004がベースなので、依然としてMac OSと完全にコードが一致しているわけではありません。また、この先にJIS X 0213で新たな拡張や、新しい漢字コードの登場なども皆無ではないので、そうした場合には新たな火種がまた生まれることになります。
また、世の中のすべてのマシンをWindows VistaとMac OS Xで置き換えられるわけではなく、古い機種も多く残ったままですから、これらとのコード非互換性は残ったままですし、携帯電話に関しても同様でしょう。根本的には、日本語の文字があまりに多様性に富みすぎていて、コード化が難しいということに尽きるでしょう。もちろんこれはIT関係者から見た視点であって、日本語関係者からすれば「多様性のある日本語を無理に押し込めようとすることに問題がある」という意見もありそうですし、簡単に収束する議論にも思えません。とりあえずユーザーとしては、さまざまな文字集合で共通するコードのみを使って運用する、というのが1番賢明な策なのでしょう。