June 2026
Intermediate
384 pages
4h 17m
Japanese
「1.2 バイト単位のトークン化」では、UTF-8を使えば「どんな文字も0〜255の数値列で表現できる」ことを説明しました。しかし、なぜそれが可能なのでしょうか? ここでは、UTF-8の内部の仕組みを詳しく見ていきます。
コンピュータは情報を「バイト」という単位で扱います。1バイトには0〜255の整数を1つだけ格納できます。英語の「A」はUnicodeのコードポイントが65なので、1バイトにそのまま収まります。しかし「あ」のコードポイントは12354であり、255を大きく超えています。
このような大きな数値を扱うためにエンコーディングがあります。エンコーディングとは、大きなコードポイントを複数のバイトに分割して格納するルールのことです。
Unicode文字をバイト列に変換する方式は主に3つあります。UTF-32、UTF-16、UTF-8です。それぞれの方式で同じ文字がどう表現されるか、比較してみましょう(表A-1)。
表A-1 UTF-32、UTF-16、UTF-8のエンコーディング方式
| 方式 | ルール | 'A'(65) | 'あ'(12354) | ' '(128513) |
|---|---|---|---|---|
| UTF-32 | 常に4バイト | [0, 0, 0, 65] | [0, 0, 48, 66] | [0, 1, 246, 1] |
| UTF-16 | 2バイト(まれに4バイト) | [0, 65] | [48, 66] | [216, 61, 222, 1] |
| UTF-8 ... |
Read now
Unlock full access