定義
世界中のあらゆる文字をコンピュータ上で一貫して表示・処理できるように作られた国際標準の文字コード規格です。各国の言語や記号、絵文字の一つひとつに重複しない固有の識別番号を割り当てています。一部の複雑な絵文字などは複数の番号を組み合わせて表現することもあります。
昔よく見た「文字化け」が起きていた理由
ネットサーフィンをしたり古いファイルを開いたりしたとき、文字が「縺ゅ」「」といった意味不明な記号の羅列(文字化け)になって困った経験はありませんか? 画面に正しい文字が表示されない理由は、そもそもコンピュータが文字をまったく理解できない機械だからです。
コンピュータは「0」と「1」でできた数値しか理解できません。そのため画面に文字を表示するには、「1番はA、2番はB」のように文字と数値を対応づけた約束の表(文字コード表)が絶対に必要になります。
問題はかつて、国や会社ごとにそれぞれ異なる番号表を作って使っていた点にあります。アメリカは英語を書くために「ASCII(アスキー)」というルールを使い、日本は「Shift_JIS」、韓国は「EUC-KR」といった独自のルールを採用していました。異なる番号表を使うコンピュータ同士で文書をやりとりすると基準が食い違い、文字が容赦なく化けてしまっていたのです。
世界中のすべての文字に世界で唯一の番号を
コンピュータが世界中で普及し、一つのソフトウェアで複数の言語を同時に扱う場面が増えるにつれて、この混乱は無視できない大問題になりました。国ごとに番号表がバラバラでは、ソフトウェアを作るたびに個別の文字コード対応に追われてしまうからです。
そこで1980年代後半、AppleやXeroxなどの技術者たちが「人類のすべての文字を、たった一つの巨大な表にまとめよう」という構想を立ち上げました。これが「統一された規則」を意味するUnicode(ユニコード)です。1991年にはユニコードコンソーシアムが設立され、インターネットの普及とともに事実上の世界標準となりました。
Unicodeは、地球上に存在するほぼすべての文字に重複しない固有の番号を1つずつ割り当てました。アルファベットやひらがな・カタカナ、漢字はもちろん、ハングルやアラビア文字、ヒンディー語、さらには古代エジプトのヒエログリフやスマホの絵文字まで登録されています。今やコンピュータは、世界中の誰とデータをやりとりしても、番号さえ確かめればどの文字かがすぐに分かるのです。
もう少し詳しく:番号の割り当てと保存方法は別物
もう少し正確に言うと、Unicodeは文字に番号を振った「整理番号の一覧」であり、その番号をコンピュータのファイルに実際にどう記録するかは別の話です。この記録方式を「文字エンコーディング」と呼び、その中で最も広く使われている標準が「UTF-8」です。
UTF-8は、文字によってデータのサイズ(バイト数)を賢く変える方式です。Unicode番号が小さい英数字(ASCII範囲)は1バイトとコンパクトに保存し、番号が大きいひらがなや漢字、ハングルなどは3バイト、絵文字などは4バイトへと柔軟に広げて記録します。サイズを決める基準は、文字の形の複雑さではなく番号がどの範囲にあるかです。
ここで注意したい点があります。UTF-8が過去の文書をそのまま正しく読めるのは、昔の英語用規格であるASCIIだけです。Shift_JISやEUC-JPなどで保存された古い日本語文書をUTF-8として開くと、やはり文字化けが起きます。Unicodeが文字に変わらない固有値を与えたとしても、ファイルを読み書きする保存ルールが一致していなければ文字は正しく表示されません。
よくある誤解
UnicodeとUTF-8はまったく同じ意味の言葉だ。
Unicodeは各文字に固有の番号を割り当てた「番号の台帳」であり、UTF-8はその番号をコンピュータ上で「0と1」として効率的に記録する「符号化方式(エンコーディング)」です。
UTF-8を使えば、昔の規格で作られた古い文書も自動的に文字化けせず読める。
UTF-8が過去の規格とそのまま互換性を持つのは昔の英語規格(ASCII)だけです。昔のShift_JISやEUC-JPなどで保存された文書をUTF-8で開くと、そのまま文字化けしてしまいます。
日常で出会う場面
スマホで友だちに送った笑顔の絵文字(😀)が、相手のiPhoneやAndroidでデザインは少し違っても、同じ「笑顔」として正しく伝わること。
1つのWebページの中に、日本語・英語・韓国語・アラビア語などが文字化けすることなく一緒に並んで表示されていること。
つまり ひとことで
Unicodeは、世界中のあらゆる文字や記号に重複のない固有番号を割り当てることで、どんなコンピュータでも文字化けせずにやりとりできるようにした国際標準ルールです。