ユニコード規格

ユニコード規格 は、書かれた文字と テキストに対するコード化スキームの仕様です。 ユニコード規格は、マルチリンガル・テキストのエンコードに整合性を持たせ、 矛盾を起こさずにテキスト・データを国際的に交換できるように した汎用の規格です。 C 用 ISO 規格は、「Information technology - Programming Languages - Universal Multiple-Octet Coded Character Set (UCS), ISO/IEC 10646:2003」を参照します。(octet という用語は、ISO ではバイトの意味で使用されます。) ISO/IEC 10646 規格は、エンコードのフォーム数がユニコード規格より制限され ています。すなわち、ISO/IEC 10646 に準ずる文字セットはユニコード規格も満たします。

ユニコード規格は、各文字に固有の数値と名前を指定しており、数値のビット表 現に 3 つのエンコード方式を定義しています。 名前と値のペアで文字の識別を行います。 文字を表す 16 進値はコード・ポイント と呼ばれます。 仕様には、全体の文字特性、すなわち、各文字の大/小文字、方向性、英字特性、 その他のセマンティクス情報も記述されています。 ASCII に基づくと、ユニコード規格は英字、表意文字、およびシンボルを扱い、予 約済みコード・ポイント範囲でインプリメンテーション別の文字コードを定義すること ができます。 したがって、ユニコード規格に準拠するエンコード方式は、世界中のすべての歴史的スクリプトへの対応を含め、あらゆる既知の文字エンコード要件を扱える十分な柔軟性があります。

C99 では、ISO/IEC 10646 で定義されているユニバーサル文字名構成を使用して、 基本ソース文字セット外の文字を表すことができます。ID、文字定数、およびストリング・リテラルでユニバーサル文字名を使用 することができます。

以下の表に、一般的なユニバーサル文字名の構成と ISO/IEC 10646 のショート・ネーム の対応を示します。
ユニバーサル文字名 ISO/IEC 10646 ショート・ネーム
ここでは、N は 16 進数字です。  
¥UNNNNNNNN NNNNNNNN
¥uNNNN 0000NNNN

C99 は、基本文字セット (基本ソース・コード・セット) 内の文字を表す 16 進値、および ISO/IEC 10646 で予約されているコード・ポイントを制御文字に使用することを禁止しています。

以下の文字も禁止されています。
  • ショート ID が 00A0 より小さい文字。 ただし、0024 ($)、0040 (@)、または 0060 (') は例外です。
  • ショート ID が D800 から DFFF まで (両端を含む) のコード・ポイント範囲内にある文字

UTF リテラル (IBM 拡張)

ISO C 委員会は、ユニコード UTF-16 および UTF-32 文字リテラルをサポートするために、それぞれ u-literals および U-literals のインプリメンテーションを承認しました。

以下の表に、UTF リテラルの構文を示します。
表 1. UTF リテラル
構文 説明
u'character' UTF-16 文字を示します。
u"character-sequence" UTF-16 文字の配列を示します。
U'character' UTF-32 文字を示します。
U"character-sequence" UTF-32 文字の配列を示します。
u リテラルのストリング連結
u-literals および U-literals に関する連結規則は、ワイド文字リテラルの場合と同じです。通常の文字ストリングがある場合は、ワイド化されます。 可能な組み合わせは以下のとおりです。 その他の組み合わせはすべて無効です。
組み合わせ 結果
u"a" u"b" u"ab"
u"a" "b" u"ab"
"a" u"b" u"ab"
   
U"a" U"b" U"ab"
U"a" "b" U"ab"
"a" U"b" U"ab"
複数の連結を使用することもできますが、上記の規則が再帰的に適用されます。