Unicodeの中でもUTF-8は他の符号化方式(UTF-16、UTF32)と比べ可変長である点においては特殊です。文字によって1byte~4byteに長さが異なります。裏を返すとコードポイントの範囲によって「何バイト使用するのか」が決まります。このルールは固定長と比較して複雑ではありますがASCII文字と重複する部分は同じ1バイトで表現している点は大きなメリットだと思います。また、WEBサイトの文字コードシェアを見ても圧倒的にUTF-8が利用されています。
1~4バイト構成文字例
バイト | 割当の範囲 | 例 | |||
文字 | コードポイント | 16進数 | 補足 | ||
1バイト文字 | U+0000〜U+007F | A | U+0041 | 0x41 | 半角大文字”A” |
2バイト文字 | U+0080〜U+07FF | Σ | U+03A3 | 0xCEA3 | シグマ(U+2211にも∑が割り当たっているがこれとは別物。U+2211のシグマは3バイト文字) |
3バイト文字 | U+0800〜U+FFFF | あ | U+3042 | 0xE38182 | 通常の「あ」 |
4バイト文字 | U+10000〜U+10FFFF | 𩸽 | U+29E3D | 0xF0A9B8BD |
ホッケ(魚+花) |
文字境界の判定方法
UTF8では、以下のように先頭1バイトを見れば何バイト文字なのか判断がつきます。2文字以上の場合ビットパターンが’10’始まりなので、文字の境界を判定する事も容易です。