UTF-8

unicodeを8ビットコードの範囲で表現するエンコード方式。

エンコード方法

下記のエンコード規則に従って、x の位置にunicodeのビット列を埋め込む。

unicode range (hex.) UTF-8 octet sequence (binary) 
U+0000  - U+007F  0xxxxxxx                            (00-7f) 7bit 
U+0080  - U+07FF  110xxxxx 10xxxxxx                   (c0-df)(80-bf) 11bit 
U+0800  - U+FFFF  1110xxxx 10xxxxxx 10xxxxxx          (e0-ef)(80-bf)(80-bf) 16bit 
U+10000 - U+1FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx (f0-f7)(80-bf)(80-bf)(80-bf) 21bit

UCS-4 の場合は、建前上0x7FFFFFFFまでコード空間があるので、第一バイトをf8-fb(111110xx)とした5バイトコード、第一バイトをfc-fd(1111110x)とした6バイトコードも定義されているが、実際には使用されない。

符号化されたバイト列は、左から順に出力する。先頭にBOM(byte order mark)として、EF BB BF (U+FEFFのUTF-8表現) が出力される場合があるが、EF BB BF固定であり、byte orderは固定である。

UTF-16で用いられているサロゲートペア領域(U+D800~U+DFFF)も上記に従ってエンコード可能であるが、禁止されている。サロゲートペアは、U+10000~U+1FFFFのコードを16ビットコードのペア(代用対)で表現するための仕様なので、UTF-16以外では用いることは出来ない。

デコード方法

シフトJISと同様に、文字列の先頭から読んでいかないと第一バイトを正しく判断できないので、文字列の途中からデコードする事は出来ない。

  1. 第一バイトの値によってコード長を判断し、x の位置のビットを順次取り出す。
  2. 第一バイトが0xF8以上の場合、及び、第二バイト移行が0x80-0xBFの範囲外の場合は不正文字とする。