2000/03/17
前二回のあらすじ。英語圏のASCII文字セット以外の、各国独自の文字セットを表現するために、7bitのまま「エスケープシークエンス」方式で拡張されたJISコードと、8bitを使って拡張された日本語EUCコードが発明された話である。そして話は3つ目文字コード、すなわちShift-JISコードに及ぶ。
Microsoftが普及させたMS-DOSは、もともと日本語に対応してなかったのであるが、MS-DOSを日本語対応させるにあたって、とりあえず漢字を表現することはできないが、カタカナだけなら表現できるということで、勝手に8bit目をカタカナに勝手に割り当ててしまった。これが俗に言う「半角カタカナ」と言われるものである。(Webでは半角カタカナを使うことはタブーとされているので、下のテーブルは全角で表現してある。そもそも半角とか全角という言葉も本当は不正確なのであるが。)
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |
10 | - | 。 | 「 | 」 | 、 | ・ | ヲ | ァ | ィ | ゥ | ェ | ォ | ャ | ュ | ョ | ッ |
11 | ー | ア | イ | ウ | エ | オ | カ | キ | ク | ケ | コ | サ | シ | ス | セ | ソ |
12 | タ | チ | ツ | テ | ト | ナ | ニ | ヌ | ネ | ノ | ハ | ヒ | フ | ヘ | ホ | マ |
13 | ミ | ム | メ | モ | ヤ | ユ | ヨ | ラ | リ | ル | レ | ロ | ワ | ン | ゛ | ゜ |
その後コンピュータの高機能化に伴って漢字を扱えるだけの性能が備わったため、漢字を入れることになったのであるが、日本語EUCのように8bit目を1にした部分はすでに1バイトカタカナが入っていて使えない。そこで無理矢理、コード表を「シフト」して、使っていない部分を巧妙に使い漢字を詰込んだものが Shift-JIS なのである。具体的には、漢字を表す2byteのうち、1byte目は上位4ビット8,9,14の文字を使い(なぜなら0〜7はASCII、10〜13は1byteカタカナに使われているので)、あとの1byteは上位4ビット4〜15までを使うという変則的な割り当てをしている。
つまり歴史的経緯から、最初に「半角カタカナ」なんてものを作ってしまったために、コード体系が歪んでしまったものなのである。これは仕様として非常に醜く、しかも日本語環境に独特のものなので国際規格でもなんでもなく、一部では非常に嫌われているものなのである。また、こうした経緯の為に「半角カタカナはメールで使うな」という不文律が出来上がってしまったのである。ちなみにEUCでは、半角カタカナは漢字とは別の文字セットとして扱われており、表現できないわけではないのであるが、日本語漢字セットの中にカタカナは含まれているので、敢えて使われる場合はほとんどない。
最近ではこれに加えてUnicodeと呼ばれる新しいコード体系を発明し標準化しようという動きもある。これは、全世界にある文字を16bitのコード体系にすべて入れてしまおうというコンセプトの元に作られたものらしいが、違う言語の似ている文字を一つのコードにしてしまおうとしたり、その割には所謂「半角カタカナ」が残っていたり、何よりそれまでのJISや日本語EUCやShift-JISなどの各コードと全く互換性がないこともあり、これもあまり美しいコード体系とは言えず、抵抗を感じる人も多い。
このように、環境によって使われている文字コードが違うために、例えばあるコード体系を仮定した環境で別のコード体系のテキストを見ようとすると、テキストが誤って解釈され意味不明の文字の羅列になってしまうという「文字化け」という現象に悩まされる、といったことになる。最近ではWebなどでは、ブラウザの文字コードの設定を「日本語(自動判定)」というところにしておけば、どのコードで書かれたテキストも正しく解釈して読めるようになって、あまり意識しなくてもいいようになってきたが、だからこそ、ひょんなことから文字化けが起きた時に訳がわからず立ち往生するという人も増えてきているのではないだろうか。
まあいろいろ難しいことを並べてきたが、要は日本語文字コードには、大きく分けて3種類の文字コード体系があるということを認識しておいてもらえれば幸いである。