UTF-8
Unicode の可変長エンコーディング方式。Web の標準文字コードとして広く使われている。
UTF-8 は Unicode を実装するための可変長文字エンコーディングです。1 バイトから 4 バイトの可変長で文字を表現し、ASCII (英数字・記号) との完全な互換性を保ちながら、世界中のすべての Unicode 文字を表現できます。2024 年時点で Web ページの 98% 以上が UTF-8 を使用しており、インターネットにおける事実上の標準文字コードです。
UTF-8 のバイト数は文字の種類によって異なります。ASCII (U+0000〜U+007F) は 1 バイト、ラテン文字の拡張やキリル文字 (U+0080〜U+07FF) は 2 バイト、日本語・中国語・韓国語の漢字やひらがな・カタカナ (U+0800〜U+FFFF) は 3 バイト、絵文字や一部の漢字 (U+10000〜U+10FFFF) は 4 バイトです。この可変長設計により、英語テキストは ASCII と同じサイズで格納でき、多言語テキストも効率的に表現できます。Web 技術の入門書でも UTF-8 は必須知識として解説されています。
UTF-8 が Web 標準として普及した理由は複数あります。ASCII 互換性があるため、既存の ASCII ベースのプロトコル (HTTP、SMTP、URL) やツールがそのまま動作します。バイトオーダー (エンディアン) の問題がなく、BOM (バイトオーダーマーク) が不要です。また、バイト列の途中からでも文字境界を特定できる自己同期性を持ち、データの破損に強い設計になっています。
HTML では <meta charset="UTF-8"> で文字コードを宣言します。この宣言がないと、ブラウザが文字コードを誤判定して文字化けの原因になります。HTTP レスポンスヘッダーの Content-Type: text/html; charset=utf-8 でも指定でき、HTML の meta タグとヘッダーの両方で指定するのがベストプラクティスです。
データベースでは UTF-8 の扱いに注意が必要です。MySQL の utf8 文字セットは歴史的な理由で最大 3 バイトまでしかサポートせず、4 バイト文字 (絵文字など) を格納できません。絵文字を含むすべての Unicode 文字を格納するには utf8mb4 を使用する必要があります。PostgreSQL の UTF8 は最初から 4 バイトに対応しています。エンコーディングの技術書で詳しく学べます。
文字数カウントとの関連では、UTF-8 のバイト数と文字数の違いを理解することが重要です。「こんにちは」は 5 文字ですが、UTF-8 では 15 バイト (3 バイト × 5 文字) です。データベースのカラムサイズやファイルサイズの制限はバイト数で指定されることが多いため、文字数だけでなくバイト数も把握しておく必要があります。文字数カウントツールで文字数とバイト数の両方を表示することで、ユーザーがさまざまな制限に対応できるようになります。