Unicode 文字エンコード

Unicode 文字エンコード規格は、固定長の文字エンコード方式です。 これには、世界で実際に使われているほとんどすべての言語の文字が含まれています。

Unicode に関する情報は、「 The Unicode Standard 」の最新版、および Unicode Consortium の Web サイト ( www.unicode.org) から入手できます。

Unicode では、エンコードするデータのデータ・タイプに応じて、8 ビットと 16 ビットの 2 つのエンコード形式が使用されます。 デフォルトのエンコード形式は 16 ビットです。 この場合、それぞれの文字の幅は 16 ビット (2 バイト) で、 通常は U+hhhh (hhhh の部分は、文字の 16 進数コード・ポイント) と表されます。 世界の主要な言語で使われているほとんどの文字をエンコードするのであれば、65 000 を超えるコード・エレメントがあれば十分ですが、Unicode 規格の拡張メカニズムでは、さらに 100 万文字をエンコードすることが可能です。 この拡張メカニズムでは、 高位のサロゲート文字と低位のサロゲート文字の組み合わせを使用して、 外字および補足文字をエンコードします。 前者 (高位) のサロゲート文字には、U+D800 から U+DBFF の間のコード値が含まれ、 後者 (低位) のサロゲート文字には U+DC00 から U+DFFF の間のコード値が含まれます。

UCS-2

国際標準化機構 (ISO) および国際電気標準会議 (IEC) 規格 10646 (ISO/IEC 10646) の定める Universal Multiple-Octet Coded Character Set (UCS) には、16 ビット版 (UCS-2) と 32 ビット版 (UCS-4) があります。 UCS-2 は、サロゲートのない Unicode 16 ビット形式と同一です。 UCS-2 では、 Unicode のバージョン 3.0 のレパートリーで定義されている、 すべての (16 ビット) 文字をエンコードできます。 Unicode バージョン 3.1 以降で導入されている新しい補足文字をそれぞれエンコードするには、2 つの UCS-2 文字 (サロゲートの高いものが先で低いものが後) が必要とされます。 これらの補足文字は、 オリジナルの 16 ビットの Basic Multilingual Plane (BMP または Plane 0) の外部で定義されています。

UTF-16

ISO/IEC 10646 ではまた、 一部の UCS-4 文字を 2 個の UCS-2 文字でエンコードする拡張の技法も定義されています。 この拡張は UTF-16 といい、サロゲートのある Unicode 16 ビットのエンコード形式と同じです。 つまり、UTF-16 文字のレパートリーには、すべての UCS-2 文字に加えて、 サロゲートのペアを通してアクセス可能な 100 万の文字が含まれることになります。

16 ビットの Unicode 文字をバイトにシリアル化する際は、プロセッサーによって、 最上位バイトが先頭の位置に置かれる場合 (ビッグ・エンディアン順) と、 最下位バイトが先頭に置かれる場合 (リトル・エンディアン順) があります。 Unicode のデフォルトのバイト・オーダーはビッグ・エンディアンです。

UTF-8

16 ビットの Unicode 文字には、 バイト試行の ASCII ベース・アプリケーションとファイル・システムに関する大きな問題があります。 例えば、Unicode を認識しないアプリケーションでは、 大文字 'A' (U+0041) の先頭の 8 つの 0 ビットを単一バイトの ASCII NULL 文字として誤って解釈してしまう場合があります。

UTF-8 (UCS 変換形式 8) は、一種の変換アルゴリズムであり、 固定長の Unicode 文字を可変長の ASCII セーフ・バイト・ストリングに変換します。 UTF-8 では、ASCII 文字や制御文字はそれぞれ通常の単一バイト・コードで表されますが、 他の文字は 2 バイト以上の長さになります。 UTF-8 では、 非補足文字と補足文字の両方をエンコードできます。

UTF-8 文字は最大で 4 バイト長までです。 非補助文字は 3 バイト長までで、補助文字は 4 バイト長です。

UTF-8 形式の各 UTF-16 文字のバイト数は、 表 1から判別できます。

表 1. UTF-8 ビットの配布
コード値

(バイナリー)

UTF-16

(バイナリー)

最初のバイト

(バイナリー)

2 番目のバイト

(バイナリー)

3 番目のバイト

(バイナリー)

4 番目のバイト

(バイナリー)

00000000

0xxxxxxx

00000000

0xxxxxxx

0xxxxxxx      
00000yyy

yyxxxxxx

00000yyy

yyxxxxxx

110yyyyy 10xxxxxx    
zzzzyyyy

yyxxxxxx

zzzzyyyy

yyxxxxxx

1110zzzz 10yyyyyy 10xxxxxx  
uuuuu

zzzzyyyy

yyxxxxxx

110110ww

wwzzzzyy

110111yy

yyxxxxxx

11110uuu

(uuuuu = wwww+1)

10uuzzzz 10yyyyyy 10xxxxxx

上記の表にリストされているいずれのコード値でも、一連の u's、w's、x's、y's、および z's は、文字のビット表示です。 例えば、U+0080 は 2 進数形式の 11000010 10000000 にトランスフォームされ、 サロゲート文字のペア U+D800 U+DC00 は 2 進数形式の 11110000 10010000 10000000 10000000 になります。