UTF-8 (UCS transformation format)

The Open Group は、既存のファイル・システムで使用するよう設計された UCS の変換形式を開発しました。 その意図は、UCS を変換形式の処理コードとして、ファイル・コードとして使用できるようにすることです。

UTF-8 には、以下の属性があります。
  • ASCII のスーパーセットです。ここで、ASCII 文字は、 同じ数値の単一バイト文字としてエンコードされます。
  • マルチバイト文字では、ASCII 文字を表現する値以外には、 ASCII コード値は発生しません。
  • 文字の最初のバイトは、マルチバイト文字シーケンスで続くバイト数を示し、 シーケンスの別の場所に置くことはできません。

UTF-8 は、1、2、3、4、5、および 6 バイトの長さのマルチバイト文字を使用して、 0 から 0x7FFFFFFF の範囲で UCS 値をエンコードします。 単一バイト文字は、0 から 0x7f の範囲の ASCII 文字のために予約されています。 これらのすべての文字では、高い順序のビットが 0 に設定されています。 1 バイトより大きいすべての文字エンコードについては、最初のバイトで、 使用されるバイト数が判別され、各バイトの高い順序のビットが設定されます。 10xxxxxx (x はビットを表し、0 か 1) というビットの組み合わせで開始しないバイトはすべて、 UCS 文字シーケンスの先頭になります。 次の表は、UTF-8 マルチバイト・コードを示します。

バイト ビット 最小 16 進数 最大 16 進数 バイナリーでのバイト・シーケンス
1 7 00000000 0000007F 0xxxxxxx
2 11 00000080 000007FF 110xxxxx 10xxxxxx
3 16 00000800 0000FFFF 1110xxxx 10xxxxxx 10xxxxxx
4 21 00010000 001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5 26 00200000 03FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxx 10xxxxxx
6 31 04000000 7FFFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

UCS 値は、マルチバイト・エンコードでは、x ビットを連結しただけのものです。 値 (例えば、UCS 0) をエンコードする複数の方法がある場合、 最短のエンコードだけが許可されます。

UCS-2 をエンコードするには、次に示す UTF-8 のサブセットが使用されます。

バイト ビット 最小 16 進数 最大 16 進数 バイナリーでのバイト・シーケンス
1 7 00000000 0000007F 0xxxxxxx
2 11 00000080 000007FF 110xxxxx 10xxxxxx
3 16 00000800 0000FFFF 1110xxxx 10xxxxxx 10xxxxxx

この UTF-8 のサブセットでは、最大で 3 バイトが必要です。