【ゆーてぃーえふはち】

UTF-8 とは?

最終更新:
💡 Unicodeの文字を、1〜4バイトの列で表す方式

Unicodeの符号位置を1〜4バイトで表す文字エンコーディング。A・é・あ・😀の具体例、見た目の文字数とバイト数の違い、MySQLのutf8mb4を解説します。

📌 このページのポイント
UTF-8:文字をバイト列で表す文字バイト列(16進)長さA411バイトéC3A92バイトあE381823バイト😀F09F98804バイト各行は一つのUnicodeの符号位置の例見た目の1文字が、複数の符号位置の場合も
小さな箱一つが1バイトで、UTF-8で符号化した実際の値です。日本語が全部3バイト、絵文字が全部合計4バイトという分類ではありません。
ひよこ ひよこ
UTF-8って、文字をどう保存する仕組み?
ペンギン先生 ペンギン先生
Unicodeで文字などに割り当てる番号を、バイト列に変換する方式だよ。その番号を符号位置と呼ぶ。UTF-8では、サロゲート用の範囲を除くUnicodeの符号位置を1〜4バイトで表す。
ひよこ ひよこ
8なのに、1バイトではないの?
ペンギン先生 ペンギン先生
8ビットの単位を使うという意味だよ。例えばAは1バイト、éは2バイト、あは3バイト、😀は4バイトになる。ASCIIの範囲は同じ値の1バイトなので、英数字や記号の扱いにも役立つ。
ひよこ ひよこ
日本語なら、全部3バイト?
ペンギン先生 ペンギン先生
よく使う日本語の多くは3バイトだけれど、例えば𠮷は4バイトだよ。また、絵文字などでは複数の符号位置を組み合わせて、見た目では一つに表示する場合がある。見た目の文字数とバイト数を分けて考えよう。
ひよこ ひよこ
文字化けしたら、UTF-8と指定すれば直る?
ペンギン先生 ペンギン先生
実際のバイト列と、読み取る側が想定する方式を合わせる必要がある。別の方式で保存したファイルにUTF-8と宣言するだけでは、内容は変換されない。保存・通信・読み込みの設定を確認するんだ。
ひよこ ひよこ
MySQLではutf8ではなくutf8mb4が必要と言われたよ?
ペンギン先生 ペンギン先生
MySQL 8.4ではutf8が従来のutf8mb3の別名になっていて、utf8mb3は最大3バイトの範囲に限られる。公式はutf8mb4を推奨している。これはMySQLの名前の扱いで、UTF-8自体が3バイトまでという意味ではないよ。
もっと詳しく知りたい人へ

UnicodeとUTF-8は同じ?

Unicodeは文字などの符号位置とその性質を定めます。UTF-8はそれらをバイト列で表す符号化形式です。同じUnicodeの符号位置を、UTF-16など別の形式で表すこともできます。

画面で同じように見える文字なら、バイト数も同じ?

そうとは限りません。例えばéを一つの符号位置U+00E9で表すとUTF-8で2バイト、eと結合するアクセントU+0301で表すと合計3バイトです。表示が同じように見えても、内部の符号位置の並びを確認する必要がある場合があります。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「UTF-8」って出てきたら「Unicodeの文字を1〜4バイトの列で表す方式」と思えばだいたいOK!
📖 おまけ:英語の意味
「Unicode Transformation Format — 8-bit」 = 8ビットの単位を使うUnicodeの符号化形式
💬 8は一つの符号単位が8ビットであることを表します。一つの符号位置が必ず1バイトになる、という意味ではありません。

参考資料

← 用語集にもどる