定義
Unicodeに登録された世界中のすべての文字を、コンピューターが扱う0と1の二進数に変換する、標準の文字エンコーディング方式です。文字の種類に応じて、保存に使う大きさを1バイトから4バイトまで柔軟に変える、可変長の仕組みを使っています。
Webページの文字が宇宙語のように化けていた理由
インターネットの初期には、海外のWebサイトを開いたり、他の国の文書ファイルをダウンロードしたりすると、文字が宇宙語のようにひどく化けることがよくありました。コンピューターはもともと人間の文字を知らず、0と1でできた数字の信号しか扱えないからです。そこで、文字ごとに特定の数字を一対一で結びつけた約束の表を作って使うようになり、これを文字エンコーディングと呼びます。
問題は、国やOSごとに、それぞれが自分たちだけの約束の表を勝手に作ったことでした。アメリカで作られた初期の表には英語のアルファベットしか入っておらず、韓国ではハングルのためだけに独自の番号表を作って使っていました。アメリカのプログラムにハングルの番号表を入れると、コンピューターは文字をまったく別の文字として読み取り、画面に化けた文字を表示するしかありませんでした。
こうした混乱を終わらせるために、世界中のすべての文字に人類共通の固有番号をつけた巨大なデジタル辞書「Unicode」が登場しました。そして、この巨大な辞書に載った文字をコンピューターのファイルの中でいちばん効率よく保存・送信するために、広く使われている標準の約束がUTF-8方式です。
文字の大きさに合わせて封筒の大きさを変えます
UTF-8のいちばんの長所は、文字の種類によって占めるデータ量が変わる、柔軟な仕組みにあります。世界中のすべての文字を、いちばん大きな文字に合わせて同じ大きさの大きな箱に入れると、保存容量がひどくむだになってしまうからです。
箱の大きさは、その文字がUnicodeで受け取った番号によって決まります。番号がいちばん前のほう(0〜127番)にあるアルファベットや数字、基本的な句読点などの記号は、いちばん小さい1バイト(8ビット)の箱にすっぽり収まります。一方、もっと後ろの番号を受け取ったハングルや大部分の漢字は3バイトの箱に入り、最近のスマートフォンで広く使われているカラフルな絵文字は、ほとんどが4バイトで保存されます。
このように文字の特性に合わせて、1バイトから4バイトまで可変的に長さを調整します。おかげで、英語の文書は昔の方式と同じようにとても軽いまま保てます。同時に、世界中のどんな言語や絵文字も、1ページの中で違和感なく自然に混ぜて使えるようになりました。
もう少し正確に言うと:古い文書との互換の範囲
もう少し正確に言うと、UTF-8が昔使われていた方式を特別な変換なしにそのまま読み込める範囲は、従来のASCII(アスキー)規格ただ一つだけです。ASCIIは、1960年代にアメリカで作られた、いちばん基本的な英語のアルファベット、数字、特殊記号の番号表です。
UTF-8は、最初の1バイトの領域の数字の並びを、この古いASCIIコードとまったく同じ構造にそろえて設計されました。おかげで、数十年前に英語だけで書かれた膨大な古いテキスト文書やシステムプログラムのコードは、何も修正しなくてもUTF-8の環境で問題なく開けます。
ところが、かつて韓国で広く使われていた「完成型(ワンソンヒョン)」やEUC-KR方式で書かれたハングル文書は、事情がまったく違います。これらも英数字はASCIIと同じですが、ハングルや漢字はUTF-8とはまったく別の2バイトの番号で書かれているため、UTF-8の設定で開くとハングルの部分が化けてしまいます。UTF-8の下位互換性は英語のASCIIにだけ当てはまるので、古いハングル文書を開くときは、今でも正しい文字セットを指定するか、変換してあげる必要があります。
よくある誤解
UTF-8は、かつて韓国で作られた古いハングル文書も、変換なしにそのままぜんぶ読める。
UTF-8がそのまま読める古い規格は、英語中心のASCIIただ一つです。かつて韓国で使われていた完成型やEUC-KRで書かれた文書は、UTF-8で開くと文字が化けるので、別途変換が必要です。
Unicode(ユニコード)とUTF-8は、名前が違うだけでまったく同じ概念である。
Unicodeは世界中のすべての文字に固有の通し番号をつけた「文字の辞書」で、UTF-8はその番号をコンピューターのメモリ上で0と1のデータとしてどう効率よく並べて保存するかを決めた「ルール(エンコーディング)」です。
日常で出会う場面
WebページのHTML文書の先頭に <meta charset="UTF-8"> というタグを書いて、世界中の訪問者のブラウザーで文字が化けないように設定します。
スマートフォンのメッセージアプリのトークルームで、日本語の文章の間に英単語や顔の表情の絵文字をいっしょに入力しても、エラーなく送信されます。
つまり ひとことで
世界中の文字をUnicodeの番号に合わせて1バイトから4バイトの大きさに柔軟に変換し、文字化けなしに表現する標準の文字保存方式です。