Unicode は、コンピューターがテキスト データの格納および交換に使用する文字エンコーディング システムであり、世界中の主な表記体系のすべての文字に一意な数字 (コード ポイント) を割り当てます。また、科学記号や句読点など、テキストの記述に使用するその他多くの文字を含んでいます。
Unicode は、文字マップであることに加えて、アラビア語などの二方向書体の照合順序やエンコーディングのためのアルゴリズムと、テキスト形式の正規化仕様を含んでいます。
このトピックでは、Unicode の概要を示します。Unicode の詳細と Unicode で符号化できる言語のリストについては、Unicode Consortium の Web サイトを参照してください。
コード ポイント
文字は、自然言語の表記形式のテキスト単位にほぼ相当する情報単位です。Unicode は、文字をレンダリングする方法ではなく、それらを解釈する方法を定義します。
グリフは、文字のレンダリングまたはビジュアル表現であり、コンピューター画面または印刷されたページ上に作成されるマークです。文語体系によっては、1 文字が複数のグリフに対応することもあれば、複数の文字が 1 つのグリフに対応することもあります。たとえば、スペイン語の「ll」は 1 つのグリフですが、2 文字 (「l」と「l」) です。
Unicode では、文字はコード ポイントにマッピングされます。コード ポイントとは、Unicode Consortium によってすべての表記体系のすべての文字に割り当てられた数字です。コード ポイントは、「U+」とそれに続く 4 つの英数字で表されます。例として、小文字の l、ウムラウト付きの小文字の u、ベータ、およびアクセント記号付きの小文字の e に対するコード ポイントを示します。
l = U+006C
u = U+00FC
β = U+0392
e = U+00E9
Unicode には、1,114,112 個のコード ポイントが含まれており、現時点では、そのうちの 96,000 以上が割り当てられています。
面
Unicode の文字に対するコード領域は 17 の面に分割されており、1 つの面に 65,536 個のコード ポイントが含まれています。
第 1 面 (Plane 0) は BMP (Basic Multilingual Plane) です。一般に使用される文字の大半は BMP に属し、現時点ではほとんどが BMP に割り当てられています。BMP には、現代言語のほぼすべての文字と多くの特殊文字のコード ポイントが含まれています。BMP には未使用のコード ポイントが約 6,300 個あります。これらは将来文字を追加するために使用されます。
第 2 面 (Plane 1) は SMP (Supplementary Multilingual Plane) です。SMP は、歴史的書体、音楽記号、数学記号などに使用されます。
文字エンコーディング
文字エンコーディングは、各文字、そのコード ポイント、およびコード ポイントをビットで表す方法を定義します。使用しているエンコーディングがわからなければ、文字列を正しく解釈することはできません。
エンコーディング方式は無数にありますが、エンコーディング間の変換は必ずしも容易ではなく、数種類の言語の文字を考慮するものはほとんどありません。たとえば、デフォルトで OEM—Latin II を使用するように設定されている PC から、IBM EBCDIC—Cyrillic を使用する Web サイトにアクセスした場合、Latin II エンコーディング方式に存在しないキリル文字 (Cyrillic) は正しく表示されません。それらの文字は疑問符や四角形に置き換えられます。
Unicode には、すべての現代言語の大半の文字に対するコード ポイントが含まれているため、Unicode 文字エンコーダを使用すれば、コンピューターでほぼすべての既知の文字を解釈することができます。
主に使用されている Unicode 文字エンコーディング スキーマは、UTF-8、UTF-16、UTF-32 の 3 つです。UTF は Unicode Transformation Format の略であり、UTF に続く数字はエンコーディングに使用する単位サイズ (ビット単位) を示します。
- UTF-8:8 ビットの可変幅の文字エンコーディングを使用します。UTF-8 は、1 ~ 6 バイトの間で文字をエンコーディングします。UTF-16 で同じ文字をエンコーディングした場合よりもバイト数が少ない、同じ、または多い場合があります。UTF-8 では、0 ~ 127 のすべてのコード ポイント (U+0000 ~ U+0127) が 1 バイトに格納されます。2 ~ 6 バイトに格納されるのは 128 (U+0128) 以上のコード ポイントだけです。
- UTF-16:16 ビットの固定長のコード単位を 1 つ使用します。比較的コンパクトであり、最もよく使用されている文字がすべて 1 つの 16 ビット コード単位に収まります。他の文字にアクセスするには、16 ビット コード単位の組みを使用します。
- UTF-32:すべての文字をエンコードするのに 4 バイトが必要です。ほとんどの場合、UTF-32 でエンコードされたドキュメントは UTF-16 でエンコードされたドキュメントのほぼ 2 倍のサイズになります。文字ごとに 32 ビットの固定長のコード単位を 1 つ使用します。UTF-32 を使用するのは、メモリ領域が十分で、すべての文字に単一のコード単位を使用できるようにしたい場合です。
この 3 つのエンコーディング方式はどれも共通の文字をエンコードし、それらの間で変換を行ってもデータの損失はありません。
この他の Unicode 文字エンコーディングには、UTF-7 と UTF-EBCDIC があります。また、GB18030 エンコーディングもあります。これは中国語の UTF-8 に相当し、簡体字と繁体字をサポートしています。