Around the System and Development》データと文字コード(3)JISコード
カテゴリー
テキスト/フォント, Around the System and Development
作成日
2002/3/11 17:26:37
作成者
新居雅行
文字コードとして英語の文字を扱うことから始まったいろいろな事情で、8ビットは動かしがたい区切りとなった。もちろん、そこから日本語なんとか扱いたいと言うニーズが出て来るのだが、日本語はABCで記述するわけではないから、新たな拡張が必要になるのは当然になる。当初は7ビットでアルファベットや数字を表現するASCIIコードがあったのだが、そのコードとアルファベットは共通にするために、文字コードは8ビットであるとし、1ビット増やして2倍になった領域に、カナ文字をあてはめた。それが、JIS X 0201という規格である。アルファベットや数字は、ASCIIコードとほぼ同じであるというのが特徴で、英語の文章だとどちらのコード体系かは分からない。つまり、“ABC”という文字は、ASCIIもJIS X 0201も、41H 42H 43Hというデータである。JIS X 0201では80H以降も文字コードに割り当てられているのだが、実際には7ビット分がコントロールコードと共通になってしまう領域を避けて、A1H以降にカタカナや句読点などの日本語特有の記号が割り当てられている。 コンピュータの中では、7ビットであっても8ビットであっても、いずれにしても1バイトの領域を使わないといけないので、効率的にも基本的には変わらない。ただ、「7ビットコードしか扱わない」という大前提でプログラムが作られていれば、8つ目のビット、通常は最上位の桁になるのだが、その桁は0しかあり得ないという前提が適用される。そして、折に触れていちいちビットを0にするという処理を組み込むことになる。その場合、カタカナは最上位のビットが必ず1なので、カタカナがアルファベットや数字に変化してしまうというわけである。初期のアプリケーションソフトの「日本語化」ではこうした部分を排除することから始まったと言っていいくらいだった。なお、JIS X 0201の段階で、ASCIIコードのバックスラッシュと同じコードが、¥記号として定義されている。また、濁音や半濁音のある文字は定義されていないので、「パ」は「ハ」と半濁音を2つ並べないといけないのである。こうした初期の制約は今現在もどこかに残っていて、タマにぶちあたることもある。
そうして今度は漢字を利用するという方向に動くわけだが、たとえば、5000文字くらいの漢字なら、13ビットで足りると言えば足りる。だけど、コンピュータや通信が、8ビットや7ビットの世界で回りはじめていただけに、そのコードを2つ並べることで、なんとかたくさんの種類がある漢字を表現するという方向に向かう。つまり、「2バイトコード」である。そして、すでにASCIIコードで00H〜20H、7FHの34文字はコントロールコードとして利用されていたことから、残りの確実に文字として割り当てられている21H〜7EHの94文字の組み合わせで特定の漢字を表現しようとした。結果的に94×94=8836文字の漢字の表現ができるというわけだ。これをJIS X 0208という規格になっており、いわゆる「JISコード」と呼ばれるもので、現在も使われている。結果的には8バイトコードだが、7ビット×2である点も重要なのである。なお、7ビットコードの前後をそれぞれ「区」「点」と呼び、区番号、点番号を1〜94の範囲で割り当てておく、そして、その句点番号で漢字を指定するという方法も、JIS X 0201で取り入れられている。 JIS X 0201は、1978年に制定されているが、1983年に改訂が行われた。それまでのものを「旧JIS」、1983年のものを「新JIS」と呼ばれることもある。改訂により、文字の追加や置き換えなどが行われたが、一部の文字が同じコードにもかかわらず、旧字体から新字体に変更してしまったという点がのちのちの評判を悪くすることになる。つまり同じコードなのに「違う文字」であるということになってしまう。1983年の改訂でほぼJISコードというもののは固まった。その後に、1990、1997年に改訂はされているが、それほど大きな変更はない。Macintoshでは漢字Talkで新JISを採用しており、漢字Talk 7では1990年の規格に準じているが、PC-9800シリーズではかなり長い間旧JISで通していたこともあって、議論の的になっていた。 さて、「安」という文字は、JISコードでは、30Hと42Hを組み合わせたものだ。もちろん、3042Hでもかまわない。だが、30Hと42Hといったデータがある場合、もちろんJISコードと分かっていれば「安」だが、ASCIIコードとして解釈すると「0B」(ゼロとビー)であるとも解釈できる。結果的に、英語と日本語は混在して使われることも多くあるわけで、JIS X 0201とJIS X 0208は混在して使われることになる。そうなると、どちらの体系なのかを区別を付ける方法が必要になるが、そのため、どちらのコード体系で解釈するのかということを切り替える情報を組み込む必要がある。そこで利用されるのが「エスケープシーケンス」という一連のデータだ。これについても細かくは複雑になっているのだが、JISコード時代は、JIS X 0201と0208の切りかえが行えばよかったので、そのためのエスケープシーケンスが代表的なところだろう。ここでエスケープというのは、1BHのコードの文字である。もちろん、制御文字だ。制御文字には名称が付けられており「ESC」とかかれる。(ちなみに、10Hの行送りは「LF」、13Hの改行は「CR」という名前が付けられている。)そして、ESCに続いていくつかのコードが並ぶので、シーケンスなのである。コードで言えば、1BH 24H 40H、文字で言えば「ESC $@」が旧JIS、1BH 24H 42H(ESC $B)が新JISコードに切り替えるエスケープシーケンスである。また、1BH 28H 4AH(ESC (J)がJIS X 0201つまりASCIIコードに切り替えるものとして使われる。さらに、1BH 28H 42H(Esc (B)もASCIIコードへの切り替えに使われる。 結果的に、「Macが好き」というのをコードに表すと、日本語文字のJISコードとしてはそれぞれ、が=242CH、好=3925H、き=242DHとコードが割り当てられているので、
JIS X 0208では、6000余りの日本語に使われる文字が、文字のセットとして込められている。ここでは、使用頻度に応じて「第一水準」「第二水準」という区分けがされていた。初期のパソコンでは、よく使われる第一水準しか組み込まれていないことが一般的であったが、Macintoshも、第二水準が搭載されたのは、漢字Talk6くらいだったかと思うが、少し記憶が定かではない。ただ、漢字Talk 2.0の時代あたりは、PC-9800シリーズでは第二水準が一般化していたのに対して、アンチマック派の格好の攻撃材料になっていた。 いずれにしても、日本語の文字は何万あるいはそれ以上もあるし、記号の利用の需要も高いため、一度規格が決まったところで、必ず「必要な文字がない」という批判は必ず出るだろう。そして、JIS X 0208では、すべてのコードに文字が割り当てられていなかったこともあって、NECはPC-9800シリーズに漢字機能を組み込むにあたって、独自に文字を追加した。たとえば、JIS X 0208では丸数字やローマ数字の文字が含まれていなかったのである。そこで使っていないコードに丸数字などを当てはめた。一方で、Macintoshは、漢字Talk 7.1のリリースにおいて、日本規格協会のにあった文字フォント開発普及センターが制定した文字拡張を行った。そして同じ漢字コード体系なのに、同一文字に異なるコードが割り当てられるという結果になってしまったのである。その結果、いまだに電子メールを受信すると、丸数字の部分はMac OSでは関係ない文字になって見えてしまう。そうした混乱にさらに拍車をかけたのが、日本語PostScriptが、PC-9800シリーズの文字セットを利用したことである。結果的にMac OSでは、PostScriptフォントである細明朝と中ゴシックは、PC-9800シリーズの記号、その他のフォントは文字フォント開発普及センターの記号となってしまった。 いずれにしても、文字拡張はいろいろな方向性が見られた。1990年にはJIS X 0212という追加の文字セットが制定されたが、人名文字に弱いことや、文字セットの切り替えの問題もあり、結果的にあまり使われなかったし、OSとして搭載された例はないようだ。これは「JIS補助漢字」とも呼ばれている。一方で、第三水準、第四水準と呼ばれた漢字拡張が行われ、2000年にJIS X 0213として制定されたものの、すでに世界はUnicodeに向かって動きだしていたのである。