Unicode とは
この記事は約 4 分で読めます。
Unicode は世界中の文字を 1 つの番号体系で表現する国際規格で、絵文字もこの規格の一部です。日本語、英語、アラビア語、絵文字、数学記号 - あらゆる「文字」に固有の番号 (コードポイント) を割り当てることで、 異なる言語・システム間でテキストを正しくやり取りできるようにしています。
定義と目的
Unicode は、Unicode Consortium (非営利団体) が策定・管理する文字コード規格です。 1991 年の Unicode 1.0 から始まり、2024 年の Unicode 16.0 では 15 万文字以上を収録しています。
Unicode 以前は、日本語は Shift_JIS や EUC-JP、中国語は GB2312、韓国語は EUC-KR など、 言語ごとに異なる文字コードが使われていました。 これが「文字化け」の主な原因であり、Unicode はこの問題を根本的に解決するために作られました。
コードポイントとは
Unicode では各文字に「コードポイント」と呼ばれる一意の番号を割り当てます。 表記は U+ に続く 16 進数で、例えば:
- A → U+0041
- あ → U+3042
- 😊 → U+1F60A
- 🌸 → U+1F338
コードポイントは「文字の住所」のようなもので、どのシステムでも同じ番号で同じ文字を指します。
エンコーディング - UTF-8 と UTF-16
コードポイントをコンピュータのメモリやファイルに保存する方法が「エンコーディング」です。 主要なエンコーディングは 2 つあります。
| 比較項目 | UTF-8 | UTF-16 |
|---|---|---|
| 1 文字のバイト数 | 1〜4 バイト (可変長) | 2 または 4 バイト |
| ASCII 互換 | あり (英数字は 1 バイト) | なし |
| 主な用途 | Web、ファイル保存、API | Windows 内部、Java、JavaScript |
| 絵文字のバイト数 | 4 バイト | 4 バイト (サロゲートペア) |
Web の世界では UTF-8 が事実上の標準です。 HTML ファイルの <meta charset="utf-8"> は「このページは UTF-8 で書かれています」という宣言です。
Unicode と絵文字の関係
絵文字は Unicode の「ブロック」の 1 つとして収録されています。 主に以下のブロックに分散しています:
- Emoticons (U+1F600〜U+1F64F): 顔の表情
- Miscellaneous Symbols and Pictographs (U+1F300〜U+1F5FF): 天気、食べ物、動物など
- Transport and Map Symbols (U+1F680〜U+1F6FF): 乗り物、建物
- Supplemental Symbols and Pictographs (U+1F900〜U+1F9FF): 追加の絵文字
新しい絵文字の追加は Unicode Consortium の Emoji Subcommittee が審査し、年 1 回のリリースで公開されます。
Unicode Consortium とは
Unicode Consortium はカリフォルニア州に本部を置く非営利団体です。 Apple, Google, Microsoft, Meta, Amazon などの大手テック企業がメンバーとして参加し、 規格の策定と維持に貢献しています。 絵文字の提案は誰でも提出でき、公開されたプロセスで審査されます。
実務での注意点
- 文字数カウント: 絵文字 1 つは JavaScript の
.lengthで 2 とカウントされることがある (サロゲートペア) - データベース: MySQL で絵文字を保存するには
utf8mb4を使う (通常のutf8は 3 バイトまで) - URL: 絵文字を URL に含める場合はパーセントエンコーディングが必要
関連用語
- 絵文字 (Emoji) - Unicode に収録されたピクトグラフィック文字
- ZWJ (Zero Width Joiner) - 絵文字を合成する制御文字