タイトルAround the System and Development》データと文字コード(5)シフトJISとEUCカテゴリーテキスト/フォント, Around the System and Development
作成日2002/3/18 18:2:21作成者新居雅行
文字に1つ1つ番号を当てはめたのが文字コードである。それをそのまま、2進数の数値として表現して、コンピュータのメモリやあるいは記憶装置に保存すると言う方法が1つの基本的な手法であった。しかしながら、数値で例をだしたように、1バイトだと、0〜255の整数となるが、それは、1900〜2155という数値を表現するということも可能である。つまり、記録したいデータという一般的な存在があり、それを機械の中やあるいは通信においてどのように表現するかは必ずしも一致しないということに他ならない。一致していると一見簡単そうだが、それだけだと表現力に欠けると言えるだろう。
漢字を表現するためには、ASCIIコードのような7ビットのコードでは不足することで、7ビット×2のJISコードが作られたことは前回説明した。主要な漢字やひらがな、カタカナ、そして後には記号も含めて、日常的な漢字はJISコードによって番号が付けられ(コードが割り当てられ)、それは規格となりメーカーが違うとコードも違うといった問題も置きないという素地ができた。だが、JISコードの文字列の特徴は、7ビットのそれぞれを取り出したとき、ASCIIコードに対応する文字列があるので、単にデータの一部分だけを取り出したらそれは漢字コードの半分なのか、ASCIIコードの1文字なのかは判別できない。そこで、エスケープシーケンスとして、特別なコードを文字列中にはさみ、エスケープシーケンスによって「以後はJISコード」「以後はACSIIコード」といった切り替えが必要となった。
極端な例だけど、「abcあいう」という文字なら、途中に1回エスケープシーケンスを入れればいいけど、「aあbいcう」だと少なくとも5回のエスケープシーケンスが入る。だから、同じ6文字でもデータの長さ(バイト数)は大きく違ってしまうという結果になる。言い換えれば、一定のサイズのメモリを用意しても、入る文字数は一定しないということになる。これはプログラミング上ではちょっとやっかいなことでもある。
そこで、こうしたエスケープシーケンスが不要な漢字コードというものが考えられた。それが「Shift-JIS(シフトJIS)」である。CP/M-86やMS-DOSあたりから利用が始まり、Macintoshでも採用されている。今は、メモリの中、そしてディスクの中の漢字といえば、シフトJISであることが当たり前になってきているが、メモリの中についてはUnicodeへの移行が進んでいるところでもある。
このシフトJISでも、やはり漢字を扱うために8ビットより大きな桁が必要になるわけだが、コンピュータ自体が8ビットないしはその倍数での処理に対応していることから、8ビット×2、つまり2バイトのコードを利用するということになった。ASCIIコードにカナを加えたJIS X 0201では、00〜7FHはASCIIコードと基本的に同じで文字が割り当てられている。また、A0H〜DFHがカタカナとなっている。一方で、80H〜9FH、E0H〜FFHは文字が割り当てられていない。そこで、これらの範囲のコードだと、日本語文字列であるという解釈が可能となることを考えた。つまり、1バイト目は、ASCIIコードやカナに一致しないものがあると、その文字は2バイトで構成される文字であり、その次の文字と一体化してコードを算出し、そのコードに対応した文字であると解釈するわけである。結果的に、1バイト目は81H〜9FHとE0H〜FCH、2バイト目は40H〜FCH(7FHを除く)ということになった。記号類などとの混同をなるべく避けるという配慮等があったものと思われる。そして、ある一定の変換規則を適用して、シフトJISでの文字コードを求められるように工夫をした。シフトJISで新たに文字コードを割り当てたのではなく、JISコードから機械的に変換できるようにしたのである。
ところで「漢」はJISコードとして3441Hとなっているが、シフトJISでは8ABFHとなっている。そういえば、「シフトJIS規格」のようなものがあるのかと思うところだが、実際にはシフトJIS自体は規格ではなく、デファクトスタンダードなのである。したがって、規格の上では「漢」という文字はあくまで3441Hだが、各社のOSの上ではその文字を8ABFHというコードで表現しているというのがより実際に近い表現だと言えるだろう。
なお、エスケープシーケンスを否定したことから、結果的には、JIS X 0208を拡張するJIS X 0212(補助漢字)の利用は、シフトJISでは結果的にできないことにもなり、結局、なされなかった。

‥‥‥‥‥‥‥この項、続く‥‥‥‥‥‥‥[新居雅行]‥‥‥‥‥‥‥
関連リンク