当たり前の話に思えるかもしれませんが,ネットワークを介して「こんにちは」という文章を送ると,相手のコンピュータには「こんにちは」と表示されます。電子メールのやりとりやチャットなどがそうです。

 しかし,インターネットの通信はディジタルですから,実際には0か1のビット列しか伝わりません。ビット列しか伝えられないネットワークで,どうやって文字をやりとりしているのでしょうか。よくよく考えてみると,不思議ではありませんか。

対応表を決めておいて0と1に変換する

 カラクリは単純です。変換表を使うのです。やりとりを始める前に,ビット列と文字の対応関係を決めた一覧表を作っておき,送信側と受信側で同じ表を持っておきます。送信側はこの表に従って文字をビット列に直して送ります。受信側は同じ一覧表を持っているので,これを使って受け取ったビット列を文字に戻すわけです。この一覧表とそれを使ってビット列に変換する方法のことを文字コードと言います。

 文字コードは,扱う文字の種類や用途によっていくつか種類があります。コンピュータ間の通信用に英数字や記号をやりとりするために初めて作られたのがASCIIアスキーコードです。ASCIIコードは1文字当たりに7ビットのビット列を割り当てます。例えば,「A」は「1000001」,「a」は「1100001」になります。

 ASCIIコードは7ビットなので2の7乗,つまり128種類までの文字しか扱えません。漢字もある日本語を扱うには,種類が少なすぎます。そこで日本語を扱う文字コードでは,1文字をもっと長いビット列に割り当てています。多くの場合,その長さは16ビットです。

文字コードは何種類もある

 文字コードについて,もう少し詳しく見てみましょう。実は,日本語を表示する文字コードは1種類ではありません。主なものだけでも,JISジス,シフトJIS,日本語EUCイーユーシーと呼ばれる3種類があり,それぞれで一覧表(文字コード表)やその使い方などが違っています。

 ネットワークを介して日本語文字をやりとりするために,最初に用意されたのがJISコードです。ただ,JISコードはコンピュータ内の処理にはあまり向いていなかったので,WindowsマシンやMacintoshの内部ではシフトJIS,UNIXユニックスマシン内部では日本語EUCが使われるようになりました。

 この結果,Windowsマシンで作った日本語テキストのビット列と,UNIXマシンで作ったビット列は違ってきます。したがって,両者の間で日本語文字のデータをやりとりすると,無意味な文字の羅列が表示されたりします。これが文字化けです。文字をビット列に変換するために使う文字コードが,WindowsマシンとUNIXマシンで違っているために起こります。

 そこで,インターネットのようにさまざまな機種のコンピュータがデータをやりとりする必要があるときは,利用する文字コードを一つに限定しておいた方が便利です。実際,電子メールなどでは,JISコードにしてやりとりすることが決まっています。

 ところが,Webアクセスでどの文字コードを使うかは歴史的な経緯もあって特に規定がありません。そのため,あるWebページはJISコード,別のWebページはシフトJIS,また別のページは日本語EUCといった状況になっています。このままで,Webページを表示させると文字化けが頻繁に起こってしまいます。

 そこで,Webブラウザがアクセス先のWebページの文字コードを自動的に判別する機能を備え,適切な文字コードを使って画面に表示します。こうやって文字化けを防いでいるのです。