UTF‑8 は、世界中の文字を 1〜4 バイトで表す可変長エンコーディングです。 ただし、UTF‑8 の本質は「◯バイト文字」というより、“実際に使えるビット数で Unicode を区切る方式” にあります。 この仕組みがあるからこそ、Unicode の全領域(U+10FFFF)を表現できます。
UTF‑8 の基本構造は「先頭ビットで役割を示す」
UTF‑8 の各バイトは、先頭ビットで役割が決まっています。
0xxxxxxx— 1 バイト文字110xxxxx— 2 バイト文字の最初のバイト1110xxxx— 3 バイト文字の最初のバイト11110xxx— 4 バイト文字の最初のバイト10xxxxxx— 続きのバイト
この「役割ビット」があるため、バイト全部を文字コードとして使えないという特徴が生まれます。
実際に使えるビット数で見る UTF‑8 の階段構造
1 バイト文字(ASCII)
0xxxxxxx
- 使えるビット:7bit
- 表現範囲:U+0000〜U+007F
2 バイト文字(実態は 11bit 文字)
110xxxxx 10xxxxxx
- 使えるビット:5bit + 6bit = 11bit
- 表現範囲:U+0080〜U+07FF
ここが重要で、 「2 バイト文字」と言っても 16bit すべてを使えるわけではない という点です。
先頭の 110 と 10 は「役割の印」として予約されているため、 実際に文字コードとして使えるのは 11bit だけです。
3 バイト文字(実態は 16bit 文字)
1110xxxx 10xxxxxx 10xxxxxx
- 使えるビット:4 + 6 + 6 = 16bit
- 表現範囲:U+0800〜U+FFFF
日本語の大半はここに入ります。
4 バイト文字(実態は 21bit 文字)
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
- 使えるビット:3 + 6 + 6 + 6 = 21bit
- 表現範囲:U+10000〜U+10FFFF
Unicode の最大値(U+10FFFF)は 21bit なので、 UTF‑8 の 4 バイト文字で 全 Unicode を完全にカバーできます。
まとめ

UTF‑8 は「◯バイト文字」という表現が一般的ですが、実態は次のように “使えるビット数” で Unicode の範囲が決まっています。
- 1 バイト文字 → 7bit
- 2 バイト文字 → 11bit
- 3 バイト文字 → 16bit
- 4 バイト文字 → 21bit(Unicode の最大値)
この階段構造によって、UTF‑8 は ASCII と互換性を保ちながら、Unicode の全領域を表現できる という非常に優れた設計になっています。



人気ブログランキング ブログパーツ