第5回 全角と半角は何がちがうの?
--文字コードと情報量の話-- (2001/2/11 発信)
「でもちょっと待ってよ。選択肢がデータの最小単位だとかおっしゃるけれど、請求書の金額は何かの選択じゃあないわ。好きにとれるもの。」
--もしそれが3桁の数字なら、ゼロから999までの千種類の選択肢から一つを選んだものだ。
「そんなの答えになってないわよ! 請求書の桁数なんて実際は上限はないもの。あったらうちの家計は大助かりだけれど。」
--たしかに上限はないさ。だけど、それが金額の数字である限り、数字が何個か並んだものだろ? 万は5桁、億なら9桁、兆なら13桁だけど、無限に数が並ぶってことはないわな。
「それで?」
--それが答えさ。金額の数は、桁ごとに区切っていくと、結局0から9まで10個ある数字の選択肢のうちどれかを選んだものが並んでいるわけだ。数値データはだから選択肢の並びなのさ。ただし実際にはそんな一桁ずつ区切ったりせずに、7桁とか14桁でのまとまりで二進数に変換してしまうけれどね。いずれにしても数値はつねに定型化されたデータの最小要素だといえる。
「二進数・・とうとう出たわね、二進数!」
--まあ二進数の話なんかしたくなかったんだけどねえ、行きがかり上・・。二進数表現なんて計算機のまるきり内部の話で、それこそITの利用者にとっては関係ないことさ。ガソリンエンジンのピストンの構造が、車のドライバーにほとんど関係ないように。
でもまあ、もののついでだから説明すると、ふつう計算機は二進数を8桁ずつ区切って処理する。これを1バイトというんだ。1バイトは2の8乗で256通りの選択肢を意味する。
「何バイトとかって、文字の数のことじゃなかったの? てっきりそうかと思ってた。」
--文字の数といってもいい。どうしてかというと、アルファベット1文字をあらわすのに1バイトを必要とするからだ。文字は256通りの選択肢の一つなんだ。
「アルファベットは26文字しかないわよ、英語の場合。一桁ちがうんじゃないの?」
--でも大文字と小文字がある。これで52種類。それに数字が0から9まで。ほかにカンマやピリオド、セミコロンや$マーク等々が必要だし、それにタブだとか改行だとか(タイプライターにもあったけど)、それ自体は文字にはならない位置決めのための「制御記号」ってのも含めると100種類以上になる。
「でも256にはずいぶん間があるわ。」
--そうだね。それで、空いているすき間に、欧米系だと仏語のアクサンやドイツ語のウムラウトなんかを埋め込んでいる。日本だとそのスペースに半角のカタカナを割り当てていることが多い。
「ひらがなは?」
--コンピュータの世界には半角のひらがなは原則として存在しない。実はひらがなまで入れると256種類ではおさまらなくなっちゃうんだ。
「ねえそうだ、前から聞こうと思っていたんだけれど、ワープロにはどうして半角と全角ってあるの? あれって横幅以外に何かちがうの?」
--とってもいい質問だ。あれは漢字のせいなんだよ。漢字はとても256種類の選択肢ではおさまらない。そこで日本人は1バイトの倍、つまり二進数で16桁のまとまりで一つの文字をあらわすという選択肢のセットを考えた。
「256の倍って言うと、えーと、512種類? それじゃ入らないわよ。何千もあるんだから。」
--いや、256種類と256種類の組合せだから、256×256で6万5千以上の選択肢になる。これだったら漢字もひらがなも英数字も余裕で全部はいる。
それでね、いわゆる全角の文字というのは、この6万4千種類のメニューから選んだ文字を指すんだ。一方、半角の文字というのは、256種類のメニューから選んだ文字ということになる。こういう文字の選択メニューのことを「文字セット」とよぶ。
半角文字は1バイトであらわすことができるけれど、全角の文字は一つの文字をあらわすのに2バイト必要になる。だからこういう文字セットのことを「2バイト文字」といったりする。日本語だとか中国語だとか韓国語なんかは文字数が多いから、言葉を表すのに2バイト文字を使う。英語とかヨーロッパ系の言葉はほとんど1バイト文字ですむ。
「でも、それがどうして字の大きさと関係あるの?」
--うーん、それはねえ、ある意味じゃ偶然なんだ。コンピュータは米国で発達した。横1行にアルファベット80文字という画面をずっと使っていた。アルファベットは縦長の形をしている。ところで漢字はわりと真四角だろう? そこで、漢字の大きさをアルファベットの2文字分にすると、だいたい釣り合いがとれた。こうすると1行が40文字になって、これまたなぜか原稿用紙の升目の数の倍だからちょうどきりがいい。
そこで、漢字やひらがなの文字の大きさをアルファベットの2文字分にして、これを全角と呼び、アルファベットや数字を半角と呼ぶことが定着した。
最近のワープロは紙に打ち出すときの文字の大きさを好きに変えられるから、あまり全角とか半角とか言う意味はなくなってきている。でも習慣的に1バイト文字と2バイト文字を半角・全角というのが続いているんだ。
「ふーん、じゃあバイト数と文字の数はやっぱり関係があるのね。でも、それで少し分かったわ。世の中にはアルファベット用の、えーと、「文字セット」だったっけ? それと、漢字用の文字セットがあって、それで世界中が通信できるのね。」
--えーとね、その理解は7割正解だけれど3割はちがう。じつはアルファベットの文字セットは国ごとに少しずついろいろとちがう。漢字なんてもっと全然ちがう。それどころか日本には同じ漢字仮名まじりの文字のためにJISとシフトJISとEUCという3種類の全然ちがう文字セットがあったりする。
「似たような文字のメニューが何種類もあるの? ばっかじゃない?」
--人類は馬鹿なんだよ。実際には国ごとに違うどころかコンピュータ・メーカごとに違ったり、それを標準化しようとする動きがまた複数あったり、まあこの世界は未だにバベルの塔崩壊の余震の中にいるようなものだね。
「じゃあもしかして、文字化けってのも・・」
--ご明察。文字のコード体系、つまり選択肢のメニュー構成の違いが起こすトラブルなのさ。