文字コード


Table of Contents

1. 文字コード
文字

Chapter 1. 文字コード

Table of Contents

文字

文字

実用の世界では数値しか扱わないソフトウェアというのは珍しいです。殆んど のソフトウェアは必ずテキストを扱います。所で「テキスト」ってなんでしょ う?「文字列」?まぁ、そうでしょうが、じゃ「文字」って?

「文字」の定義(私の私見)をします。人間どうしがコミュニケーションに使う、 目に見えて、動かなくて(もよくて)、白黒(色に意味は無い)で、大きさに意味 が無くて(大文字小文字は大きさだけでなく形もちがう)、□に収まって、それ を1次元に並べると発語と関連がついてちゃんと意味の有るものになる、視覚 的な記号のことです。

文字をコンピュータに扱わせるとなると、コンピュータには視覚がありません (でした)から、コンピュータから視覚的に出力する事はできても、コンピュー タに視覚的に入力することができませんでしたし、コンピュータ内部では視覚 データをそのまま扱うことができなかった(今ではできるが効率が悪い)ので、 「文字」を数値で代替する事を考えました。だから、文字一つづつに、数値を 割り当てました。それが文字コードです。

なんで、文字コードには種類があるのでしょうか?これは必然ではありません。 偶然です。文字は言語毎に形が違います。英語(アルファベット)とロシア語 (キリル文字)が違うのは知っていますよね?キリル文字にも一応順番(A-Z)が あって、概ねアルファベットと対応しています。しかし、キリル文字は26文 字というわけではありません。また、同じ順番にある文字でも使いかた(意味 ではないよ)が違います。

もし、世界中で同時にコンピュータが発明され、かつ、相互にその存在を知ら ずに、当然データ交換をすることも無かったとしたら、それぞれの国でまった く勝手に文字コードを割り当てられていたでしょう。しかし、コンピュータは 事実上アメリカで開発されましたし、その進歩も圧倒的に速かった。したがっ て、他の国ではアメリカ製のコンピュータを輸入して使うことになった。よっ て、コンピュータで文字を扱う(文字コードをつける)方式はアメリカ式が基本 になってしまいました。いわゆる ASCII コードです。ASCII の AS は American Standard です。米国標準。アメリカにも非標準な文字コードがあり ます。EBSDIC というやつです。IBM 独自。

さて、アメリカ製のコンピュータを輸入したフランス人やドイツ人は当然気に 入りません。ウムラートや綴字が無いからです。ASCII では一文字を表すのに 7bit使っていました。0から127までです。実際にはコンピュータは8bitが記憶 の最小単位なので、上半分が空いていました。そこで、ここに、独自の文字を 割り当てることにしました。当然、日本もそうしました。半角カタカナです。

当時の人達はインターネットのような地球規模のリアルタイム通信網が実現す るだととは考えていませんでした(実現する頃には、コンピュータの様式自体 がかわっているだろう)。だから、上半分の使いかたは勝手にしていました。

CJKの人達(C:中華、J:日本、K:韓)はそもそも8bitというのに満足しませんで した。最低でも16bitはいると(さすがに32-bitまでとは考えなかった)。なの で、それぞれ勝手に16bitの文字コードを考えました。日本ではJISコードがそ れです。

2バイト文字コードを決めたのは良いですが、2バイト文字コード専用のコン ピュータを作るわけにはいきません。事実上の世界標準であるASCIIにも対応 しなければなりません。つまり、1バイトの文字コードと2バイトの文字コー ドを混在させられなければなりません。混在する時に問題となるのは、2バイ トの文字コードのうちの1バイト(どちらか)が1バイトの文字コードと同じコー ド(数)になってしまう事をどう回避するかです。実際、JIS コードの2バイトを分けてみると、それぞれの1バイトはASCIIともろにぶつかっています。

JISコードとASCIIを回避させる方法が幾つか(幾つも!)開発されました。 ISO-2022、EUC、Shift JISです。回避とは、本来の文字コードとは別の文字コー ドに変換(エンコード)するという方法です。

こんエンコードは酷い混乱をもたらしました。なぜなら、今使っている文字コー ドはどれなのかを指定する上で、本来の文字コードとそれをどうエンコードし たか、両方が分からないと解読できなくなってしまいました。

この混乱をなんとか収拾しようという有志が立ち上がりました。統一コードを 作ろうということです。それは Unicode コンソーシアムという団体が立ち上 げられ、UNICODEという文字コードが決められました。コンピュータは速くな り、メモリも増えたので1文字1バイトに拘ることは止そうよ。一文字2バイ トに統一しましょ。という話しです。ということで、一文字2バイトという事 で、世界中で使われいた文字コードを16bitの空間に割り当てる作業が行われ ました。

このとき、自分たち固有の文字を8bitの上半分に押し込めて我慢していいた1 バイトの人達が「2バイトも有るんだったら今まで我慢して代用文字をつかっ ていたのを正式な文字コードとして割り当てさせろ」と言い出しました。当初、 2バイトあれば余裕と考えていたのですが、そんな要求が出て来ると2バイト では足りなくなりそうになりました。

そこで、CJKの人達に圧力がかかりました。「おまいら、ただでさえ沢山の文 字コードをつかっているんだから、CJK で似ているような文字があったらまと めてしまえ」です。漢字の場合、微妙に違う意味で微妙に違う文字とか、日本 の漢字と中国の漢字、韓国の漢字で微妙に違うものもあります。それらを強引 にまとめさせられてしまいました。つまり、UNICODEにおける漢字というのは 「CJK Unified Idegraphics」というカテゴリにされていまいました。中国、 日本、韓国の統一です。

さて、1文字2バイトに統一されたと思ったのですが、ASCII な人達は納得で きませんでした。「おれたちは1文字1バイトで全然オッケーなのに、勝手に おれたちが開発したコンピュータをつかっているおまいらが1文字2バイトにしやがって、なんでおれたちがつきあわなきゃならのだ!」。また、いくらメモリが 増えたと言っても、古いコンピュータはあるし、プログラムを全部書き換える わけにはいきません。結局どうなったか、統一文字コード UNICODE をエンコー ドするための統一された方式 UTF が提案されました。良くつかわれるのが UTF-8 です。このエンコードでは、ASCII は1バイトのまま、欧州系の文字は 2バイト、CJKは3バイトになります。CJKの人達は、英語やフランス語での論 争には勝てないので、この点も渋々引き下がりました。

おしまい