Unicode 文字エンコード
Unicode 文字エンコード規格は、固定長の文字エンコード方式です。 これには、世界で実際に使われているほとんどすべての言語の文字が含まれています。
Unicode に関する情報は、「 The Unicode Standard」および Unicode Consortium Web サイト ( www.unicode.org) から入手できます。
Unicode は、エンコードされているデータのデータ・タイプに基づいて、8 ビットと 16 ビットの 2 つのエンコード形式を使用します。 デフォルトのエンコード形式は 16 ビットで、各文字の幅は 16 ビット (2 バイト) です。 16 ビットのエンコード形式は、通常 U + hhhh として示されます。ここで、hhhh は文字の 16 進コード・ポイントです。 このエンコード形式は、65 000 を超えるコード・エレメントを生成します。これは、世界の主要言語のほとんどの文字をエンコードするのに十分です。 Unicode 標準には、最大 1,000,000 個の追加文字のエンコードを可能にする拡張メカニズムも用意されています。 この拡張メカニズムでは、 高位のサロゲート文字と低位のサロゲート文字の組み合わせを使用して、 外字および補足文字をエンコードします。 最初の (または高位の) サロゲート文字には、 U+D800 と U + DBFF の間のコード値があります。 2 番目 (または低位) のサロゲート文字には、 U+DC00 から U + DFFF までのコード値があります。
UCS-2
国際標準化機構 (ISO) および国際電気標準会議 (IEC) 標準 10646 (ISO/IEC 10646) は、Universal Multiple-Octet Coded Character Set (UCS) を規定しています。 この文字セットには、16 ビット (2 バイト) バージョン (UCS-2) と 32 ビット (4 バイト) バージョン (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 では、2 つの UCS-2 文字を使用して一部の UCS-4 文字をエンコードするための拡張技法も定義されています。 この拡張は UTF-16 といい、サロゲートのある Unicode 16 ビットのエンコード形式と同じです。 要約すると、 UTF-16 文字レパートリーは、すべての UCS-2 文字と、サロゲート・ペアを介してアクセス可能な追加の 1,000,000 文字で構成されます。
16 ビット Unicode 文字をバイトにシリアライズする場合、バイトが表示される順序は、使用されているプロセッサーによって異なります。 プロセッサーの中には、最初の位置に最上位バイトを置くもの (ビッグ・エンディアン・オーダーと呼ばれる) と、最下位バイトを最初に置くもの (リトル・エンディアン・オーダーと呼ばれる) があります。 Unicode のデフォルトのバイト・オーダーはビッグ・エンディアンです。
UTF-8
16 ビットの Unicode 文字には、 バイト試行の ASCII ベース・アプリケーションとファイル・システムに関する大きな問題があります。 例えば、非 Unicode 対応アプリケーションは、大文字「A」(U+0041) の先行 8 個のゼロ・ビットを 1 バイト ASCII NULL 文字と誤って解釈する可能性があります。
UTF-8 (UCS 変換形式 8) は、一種の変換アルゴリズムであり、 固定長の Unicode 文字を可変長の ASCII セーフ・バイト・ストリングに変換します。 UTF-8 では、ASCII 文字や制御文字はそれぞれ通常の単一バイト・コードで表されますが、 他の文字は 2 バイト以上の長さになります。 UTF-8 は、非補足文字と補足文字の両方をエンコードできます。
UTF-8 文字は最大で 4 バイト長までです。 非補足文字の長さは最大 3 バイトで、補足文字の長さは 4 バイトです。
UTF-8 形式の各 UTF-16 文字のバイト数は、 表 1から判別できます。
| コード値 (バイナリー) |
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 になります。