タイトルAround the System and Development》データと文字コード(5)シフトJISとEUC(続き)カテゴリーテキスト/フォント, Around the System and Development
作成日2002/3/18 18:2:52作成者新居雅行
シフトJISの大きな特徴は、文字をなぞれば比較的簡単に、バイト数、つまりデータのサイズが求められることだ。日本語は2バイト、英語は1バイトということであるが、まずここで、「英語は日本語の半分のサイズ」という事実が出来上がった。そして、当時のパソコンの画面では、日本語の文字幅と、英語の文字幅が2:1でもあった。こうして、日本語文字のことを「全角」、英語の文字のことを「半角」と呼ぶ習慣が出来てしまった。
また、仮名文字でも、JISコードで規定されたカタカナやひらがなの「全角カナ」と、JIS X 0201つまり、A0H〜DFHのコードで定義された「半角カナ」の存在があった。前者は1文字で2バイト、後者は1文字で1バイトであったのである。もっとも、インターネットでは半角カナは使わない方がいいということになったこともあって、半角カナは廃れ気味ではあるものの、以前は混乱する要素としての代表格でもあった。(実はもっと混乱する要素として、半角と同じサイズの文字で、コードは全角と同じく2バイトという「2バイトの半角カナ」というものまであって、さらに混乱に拍車がかかった。)
今や高度なグラフィックス機能を備えたOSが常識となった段階では、「半角」「全角」という表現はあまり的を得てはいないと言えるだろう。また、文字コードのサイズを持って、「1バイトコード」「2バイトコード」と言ったところで、実は必ずしもそうではない。その後の規格の進化により、特にUnicodeとなると、文字を何バイトで表現するかは一定しない。つまり、割り当てられたコードとその表現は、よりはっきりと分離したと言える。いずれにしても、漢字が必ずしも2バイトとは限らなくなったのである。それでも、ベテランの人は、無意識に口をついて出てしまうのが「半角」や「2バイトコード」という言葉である。もちろん、通じればいいという考え方もできるし、今でも用語としては死んではない。だが、実情とある程度かけ離れてきていても、言葉としては残っているのである。

ここでシフトJISも、1バイト目はASCIIコードとの重なりがないようになっているが、2バイト目にはある程度の重なりがある。「記号の範囲を除く」という考えは、なかなかいい考えだったが、完全ではなかった。ASCIIコードのアルファベットの後に5BH〜5FHなど、ちょこちょことあちらこちらに記号がちりばめられている。とくに5CHにバックスラッシュ(JIS X 0201では¥)が問題となることが多かった。バックスラッシュは、MS-DOSそしてWindowsでは、ファイルのパスを記述する場合、つまりどのフォルダにファイルがあるかを記述する場合に、フォルダ名を区切ることに使われる。つまり、パスの文字列を1バイト単位で見て行くと、日本語の文字列の中にバックスラッシュがあることもありうる。アプリケーションソフトが、シフトJISコードかどうかをチェックするよりもバックスラッシュを優先的に見るようになっていれば、ファイル名やフォルダの指定がうまくいかない。えてして、90年代のアプリケーションはそうした動作がむしろ当たり前だった。
実は「表」という文字はシフトJISでは955CHだった。WindowsやMS-DOSでは英語版のソフトはたいがいは日本語がうまくいかなかったものの、Macintoshのソフトは逆に英語版でも日本語がたいがいうまく行っていた時代もあった。そこで発売された1-2-3のMacintosh版の英語版を早速使ってみたのだが、ファイルに保存しようとして「表計算テスト」という名前にしようとするとエラーになってしまったという笑い話がある。どうも、Macintosh版なのに1-2-3のコアの部分はMS-DOS的に動いていたのがこれで明白なのだが、バックスラッシュコードの問題は、ソフトウエアを必ずローカライズしないといけないという結果にもなっていた。

ASCIIコードと日本語が混在した状態でもきちんとソフトウエアが動作するということを目指したのが、EUCである。Extended Unix Codeということで、まさにUnixで使われていたものである。文字コードは、JISコードの7ビットのそれぞれのコードに対して、最上位の8つ目のビットに1を設定したものを採用する。これは、7ビットのこーどそれぞれに、80H=128を加えるのと同じことになる。たとえば、「漢」はJISコードでは3441Hであるが、EUCだとB4C1Hということになる。つまり、1バイト目も、2バイト目も、ASCIIコードにかかる文字列が存在しないことになる。
ただし、ここでA0H〜DFHまでの「半角カナ」の存在とぶつかってしまう。EUCで表現されたコードは、半角カナ領域と重複する。そこで、たとえば、半角カナの「ア」はB1Hなのだが、8EB1Hが半角カナの「ア」であるというように、コードの前に8EHなら半角カナと解釈するようにする。だから、半角カナは2バイトだ。さらに、JIS X 0212の文字は3バイトで表現するので、EUCは2バイトとは限らない。ただ、現実的にはJIS X 0208を超える範囲の文字は今時はUnicodeが原則となっているし、また半角カナは使わないのが原則とすれば、ほとんど「EUCは文字コードは2バイト」と言っていいだろう。
Unixのオープンソフト系のさまざまなソフトは、現在では「とりあえずEUCを使えば大丈夫」ということになっているが、本来は、7ビットの文字しかダメということではなく8ビットでもOKとするなどのハードルはいろいろある。しかしながら、いずれにしても、オープンソースの開発やあるいはテスティングなどに日本人を始めとしてASCIIコード以外の言語圏の人たちが加わることで、日本語などをデータとしては問題なく扱えるように活動がなされてきたことでの現在のUnixのブームがあるとも言えるわけだ。

∽∽∽∽∽∽∽この項、以上∽∽∽∽∽∽∽[新居雅行]∽∽∽∽∽∽∽
関連リンク