UTF‑8 は、文字を 1〜4byte の可変長で表現する方式です。そのルール上、先頭の5bitをチェックすれば、何byte文字かが分かります。
UTF‑8 の最大4byteとなる先頭5bitは 11110 です。
ここで、5bit目がゼロになっていることに気づきました。今まで特に意識していませんでした。
そこで、ふと思いました。
「もし最初の5bitが全部1だったらどうなるのか?」
調べてみました。
UTF‑8は、先頭バイトのビットで何byte文字かが分かります
UTF‑8 は、文字を可変長で表現する方式で、先頭バイトのビットパターンによって文字の長さが決まります。具体的には次のようなルールです。
0xxxxxxx → 1byte
110xxxxx → 2byte
1110xxxx → 3byte
11110xxx → 4byte
このように、先頭から連続する「1」の数によって、 その文字が 1byte〜4byte のどれに該当するかが自動的に決まります。
UTF‑8 の最大は 11110xxx(4byte文字) であり、 連続する 1 は 最大4個までという仕様になっています。
では、最初の5bitが全部1だったらどうなるのでしょうか
ここで、素朴な疑問が浮かびます。
「もし先頭の5bitが全部1、つまり 11111xxxx だったらどうなるのか?」
結論としては、 UTF‑8 としては不正なバイト列(invalid sequence)になります。
理由は次のとおりです。
UTF‑8 は最大 4byte まで
Unicode のコードポイントは最大でも U+10FFFF であり、 UTF‑8 の 4byte でこの範囲をすべて表現できます。 そのため、5byte 以上の文字は Unicode に存在しません。
11111xxxx は規格上「使ってはいけない値」
UTF‑8 の仕様では、 先頭バイトが 11111xxxx になるパターンは予約されておらず、 使用禁止と明記されています。
最初の5bitが全部1になることは UTF‑8 では起こりません。 もし 11111xxxx が現れた場合は、
- データが破損している
- UTF‑8 以外のエンコーディングである
のどちらかである可能性が高いです。
まとめ

UTF‑8 は、先頭バイトのビットパターンによって 1〜4byte の文字を判定する仕組みになっています。 最大のヘッダは 11110xxx(4byte文字) であり、 それ以上のパターン――特に 11111xxxx は UTF‑8 としては「存在しない」不正なバイト列です。
つまり、 最初の5bitが全部1になることは UTF‑8 では起こらず、 もし現れた場合はデータ破損か UTF‑8 以外のエンコーディングである可能性が高い ということになります。

HR