定義
コンピューターが文字を画面に表示するために、数字と文字を組み合わせて決めた規格の表です。かつては、世界中のすべての言語を1つの表に収めることができませんでした。そのため、言語圏やOSごとに、それぞれ別の表を使い分けていました。
スパイの暗号帳のように、コンピューターが文字を読む仕組み
昔のスパイたちがそれぞれ違う暗号帳を手にしていたら、同じ暗号文を見ても、まったく見当違いの言葉に読んでしまうでしょう。コンピューターが文字を画面に出す過程も、これによく似ています。コンピューターはもともと文字をまったく知らず、0と1の数字だけを計算する機械だからです。
そこで開発者たちは、アルファベットや記号にそれぞれ固有の番号をつけた「ASCII(アスキー)」という基本ルールをつくりました。けれどもこのルールは、英字や数字など128文字しか収められず、ほかの国の言語を入れるにはまったく足りませんでした。結局、余っている128マスの番号に、国ごとに自分たちの言語を詰め込みはじめました。
アメリカや西ヨーロッパは、特殊記号やアクセント付きの文字を入れました。日本や韓国のように文字が数千もある地域では、128マスでは足りないので、余ったマスの番号を2つ組み合わせて1文字を表す方式を使いました。このように、特定の言語や地域のために数字と文字を組み合わせて決めた規格をコードページと呼びます。国ごとのコンピューターが、それぞれ違う暗号帳を開いて文字を読みはじめた、というわけです。
画面に「宇宙語」が現れる理由
古いファイルを開いたら、見たこともない漢字や奇怪な文字がずらずらと出てきた経験があるでしょう。パソコンやファイルが壊れたからではありません。文書を書いたコンピューターと、文書を開いたコンピューターが、別々のコードページを開いていたからです。
たとえば韓国語版Windowsは「CP949」というコードページを使って、ハングルを数字に変えて記録します。ところが、この文書を日本語版Windowsで開くと、日本語のコードページ(CP932)が働いて、同じ数字をまったく違う日本語の文字に変えて表示してしまいます。
文字を書いた人の番号表と、文字を読む人の番号表がずれて起こるのが、文字化けです。異なる言語圏のあいだでファイルをやりとりするたびに、宇宙語のような文字が現れて、人々を困らせてきました。
もう少し正確に言うと:Unicodeと残された限界
国ごとに違う番号表を使う混乱を終わらせるために、世界中のすべての文字を1つの巨大な表に収めたUnicode(ユニコード)と、それを扱うUTF-8が登場しました。おかげで今日では、言語の違う外国のウェブサイトにアクセスしても、文字化けせずに気軽に読めるようになりました。
とはいえ、最新の技術が出たからといって、昔の問題が一瞬で消えたわけではありません。広く使われているUTF-8が、古いものをそのまま読み取れる範囲は、ASCII領域の英字と記号だけです。かつての完成型やCP949のような韓国語のコードページで保存された古いテキスト文書は、エンコーディングを変えずにUTF-8で読むと、今でも文字化けして見えます。
コードページは、ひとつの手法というより、コンピューターのメモリがひどく足りなかった時代に、各地域の言語をなんとか表現した、時代の技術的な産物です。今でもWindowsシステムの奥深くや、公共機関の古いプログラムの中では、このコードページのルールが生き続けています。
よくある誤解
コードページは、きれいな書体を画面に描いてくれるフォントファイルである。
フォントは文字の形を描く絵のファイルで、コードページは、どの数字がどの文字なのかを1対1で組み合わせた変換規格の表です。
最新のUTF-8規格は、昔の韓国語コードページ(CP949)で書かれたファイルも、変換なしにそのまま読み取れる。
UTF-8が以前のルールをそのまま読み取れる範囲は、英字と基本記号があるASCII領域ひとつだけです。CP949で保存されたハングルの文書は、UTF-8で開くとそのまま文字化けします。
日常で出会う場面
Windowsのメモ帳で古いテキストファイルを開いたら、文字が宇宙語のように化けて表示される現象
韓国語版Windowsのコマンドプロンプト(cmd)ウィンドウで、既定のコードページ番号として「949」が指定されている様子
ウェブブラウザーで「エンコーディング」の設定を誤って変えたときに、ハングルのウェブページが化けて見える場合
つまり ひとことで
コンピューターが各地域の言語を数字で表すために使っていた変換表で、読む側と書く側の表が違うと文字が化けます。