本記事(記事カラム)には広告が含まれています。

UTF‑8の最初の5bitが全部1だったらどうなるのか

Web技術
記事内に広告が含まれています。

UTF‑8 は、文字を 1〜4byte の可変長で表現する方式です。そのルール上、先頭の5bitをチェックすれば、何byte文字かが分かります。

UTF‑8 の最大4byteとなる先頭5bitは 11110 です。

ここで、5bit目がゼロになっていることに気づきました。今まで特に意識していませんでした。

そこで、ふと思いました。

「もし最初の5bitが全部1だったらどうなるのか?」

調べてみました。

DMM FX広告(差し込みタイプ)
広告(PR)|自分の投資スタイルを見つける。※タップで開閉
広告(PR)

DMM FXは、「最初の一歩を踏み出す場」として選ばれることがある

口座を開いてみた。取引してみた。思ったよりも難しかった。──そんな経験が、投資との距離感を知るきっかけになることもあります。


サービスを通じて、自分の投資スタイルを見つける。それは、確信ではなくても構いません。「試してみた」という実感が、次の選択の材料になることもあるからです。


DMM FXに関する詳細は、以下の広告(PR)リンクをご覧いただけます。


👇こちらは広告(PR)リンクバナーです

DMMFX

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


人気ブログランキング