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 バイトが必要です。