見出し画像

JISコードの始まり

ASCIIについては、先日

ASCIIコードは60歳

を書きました。そこでも書いたのですがASCIIはあくまでアメリカにおける標準コードであって国際的な決まりではありません。これを受けてコンピュータを使っていたような主な国では、それぞれの国における標準コードを決めていきました。

英語版のWikipediaの方が丁寧な解説が載っていましたね。

ASCII

当時のコンピュータはメモリこそ8ビット=1バイトで処理していることが多かったのですが(必ずしもそうではなかった)、通信で使うような伝送路では8ビット目を誤り検出のためのパリティビットとして使うことが多く、データとして使えるのは7ビットが基本でした。

そこでASCIIで定義されていた記号のうち、利用頻度が低いと思われたコードを国別に定義することとして、国ごとのコードが作られました。この時に対象となったのが、0x22(”)、0x23(#)、0x24(#)、0x27(’)、0x2c(`)と0x2d(~)、0x2f(/)に0x40(@)、そして0x5b~0x60と0x7b~0x7eです。

例えばイギリスでは#の代わりに£を入れました。これはタイプライターの頃からそうなっていましたしね。ダブルクォートはフォントが違う程度の差にしかならなかったのですが(~が‾になったのも、まあ見た目の範疇です)、@や[]^{|}はヨーロッパで使われているアクセント付き文字などに置き換えられ、見た目も記号としての意味を失いアルファベットのひとつとして扱われるような文字となりました。

ISO/IEC 646

そしてこの時に日本では\の代わりに¥を入れたのです。どうして\は使わないと考えたのかは今となればわかりませんが、せめてイギリスのように#の代わりにしてくれるとか、中国のように$はいらないと考えてくれれば、少なくとも20世紀末の大混乱は随分と少なくなったのではと思います。

そうなんです。FORTRANやCOBOLでも使われていたような記号については配慮があったのですが、C言語なんてまだなかったわけですから、多くの記号文字は少しくらい違っていても大丈夫だろうということだったんです。C言語が作られた環境では外国で使われることなんて考えていなかったので、その後、言語の国際規格が作られる時に、この辺りは結構問題となりました。代替表現が整えられたのですが、そんな面倒な書き方はよほどのことが無ければ使われず、コードの方が進化することとなり、代替手段も廃止の方向で今に至ります。

さて日本ではアルファベットと数字だけでは自分の国の文字を表現できません。日本語にはひらがな、カタカナ、そして漢字がありますが、当時のコンピュータではたくさんの種類と表現をするのに密度の高い文字が必要となる漢字は諦めるしか無く、最低限ということでカタカナだけをコード化することにしました。当然、新たに50を超える文字が入るので、ASCIIの隙間に入れるなんて言う芸当はできません。そこで図形文字のコードを「切り替える」という方法で0x20~0x5fのコードにカタカナと日本独自の記号を割り振りました(0x60~0x7fは未定義)。

JIS X 0201 (旧JIS C 6220) 7ビット及び8ビットの情報交換用符号化文字集合 : 1969年

もちろん8ビットが使えるのであれば0xa0~0xdfにカナを割り当てることもできることとしました。このコードであればASCIIの上位互換としてカナを扱うことができるようになります。

とほほの文字コード入門

7ビットの時は、やはり切り替えが必要になるのですが、清く正しいISOのルールでは図形文字セットの切り替えというエスケープシーケンスを使います。ところが頻繁に切り替えが発生することもあり切り替えにSI/SOを使って短いバイト数で切り替える実装もあったようです。この切り替えはやはり面倒なので日本では8ビットを使うことが標準となるのですが、アメリカで使われていた実装には8ビット目に意味を持たせていることも多く、カナを正しく処理できないこともシバシバでした。だいたいC言語のcharは7ビットが前提だったので、8ビットであるカナを使うようにするには大変で、文字列の中に0xffが登場したりすると(そのまま整数に拡張されると-1になる)いろいろと困る場面が多くありました。

JIS X0201-1997

この7ビットの文字集合は漢字の時代になってもまだ影響が残っていて、当初のインターネットはやはり伝送路は7ビットが前提だったので、メールのプロトコルなどにその影響が残っています。メールって題名(Subject)と本文で異なる方法で日本語をエンコードするのが実に面倒でわかりにくいのですが、それはそれなりの理由があるわけです。JISが0x0~0x1f(0x80~0x9f)を使わないようにしたのも制御文字を解釈するようなプログラム、特にデバイスでは文字セットの切り替えを前提としていないことが多いことを意識したもので、同じようにプロトコルのヘッダを解釈するプログラムが文字セットに影響を受けないようにするためなんですけどね。

日本語メールの仕組み

カナの時代はここまでの知識で大丈夫で、当時は日本製の家電が世界を席巻したので、輸出される多くの家電製品もこのJISで動いていました。ということで家電のファームにバグがあったり故障があったりすると、普段見かけないカナ文字が突然表示されたりするので、この謎の記号は何なんだ!とビックリすることもあったのでしょうし、あの映画マトリックスの有名なシーンにも繋がるわけです。

この後、漢字が使えるようになるには、もうひと悶着、いや数悶着が控えているんですよ。当たり前のように世界中の文字が扱える今の世界は当時を考えると夢のようです。

ヘッダ画像は、以下のものを使わせていただきました。
https://commons.wikimedia.org/wiki/File:JIS-C-6220.svg#mw-jump-to-license
By User:HarJIT - Own work. Font used is Migu 2M., CC0, https://commons.wikimedia.org/w/index.php?curid=67111376

#文字コード #JIS #7bit #8bit #文字セット #カタカナ #ASCII #JISC6220 #JISX201

この記事が気に入ったらサポートをしてみませんか?