ユニコード規格 は、筆記文字およびテキストのための エンコード・スキームの仕様です。ユニコード規格は、多言語テキストの整合したエンコード を可能にし、テキスト・データを矛盾を起こすことなく国際間で交換できる ようにする汎用 標準です。C および C++ の ISO 規格とは、 ISO/IEC 10646-1:2000, Information Technology--Universal Multiple-Octet Coded Character Set (UCS) を指します。(octet という 用語は、ISO ではバイトを指す用語として使用されます。) ISO/IEC 10646 規格は、エンコード形式の 数においては、ユニコード規格より制限があります。したがって、ISO/IEC 10646 に準拠する文字セットは、 ユニコード規格にも準拠します。
ユニコード規格は、文字ごとに固有の数値と名前を指定しており、数値のビット表記に対して 3 つの エンコード形式を定義しています。名前と値のペアで 1 つの文字の識別が作成されます。1 つの 文字を表す 16 進数値をコード・ポイント と呼びます。ユニコード仕様は、 大/小文字、文字記述の方向、英字の特性、その他のセマンティック情報など、文字ごとに 文字の特性全体についても記述しています。ユニコード規格は ASCII をモデルとして、英字、漢字、 および記号に対応し、予約済みのコード・ポイントの範囲内でインプリメンテーションの定義によ る文字コード を許可しています。したがって、ユニコード規格のエンコード・スキームは、世界中のあらゆる国の 歴史的な筆記体も含めて、既知のすべての文字エンコードに対応できるだけの柔軟性を十分 に持っています。
C99 および C++ では、ISO/IEC 10646 で定義されている汎用文字名構成を使用して、 基本のソース文字セット外の文字を表すことができます。C99 言語と C++ 言語のどちらも ID、文字定数、およびストリング・リテラルに汎用文字名を使用することを許可しています。C++ では、この言語フィーチャーはコンパイル時に指定された言語レベルには影響されません。
次の表に、一般的な汎用文字名構成および ISO/IEC 10646 の短縮名との対応を示
します。
汎用文字名 | ISO/IEC 10646 の短縮名 |
---|---|
¥UNNNNNNNN | NNNNNNNN |
¥uNNNN | 0000NNNN |
ここでは、N は 16 進数字です。 |
|
C99 および C++ では、基本文字セット (基本ソース・コード・セット) 内の文字を表す 16 進数値、 および ISO/IEC 10646 で制御文字用に予約されているコード・ポイントは許可されません。 また以下の文字も使用できません。
XL C/C++ は、データ型 uint_least16_t および uint_least32_t をインプリメントして、ユニコード規格に準拠して C および C++ の UTF-16 文字および UTF-32 文字を処理します。 データ型はまた、それぞれ u-literals および U-literals として参照される、 UTF-16 または UTF-32 文字を指定するためにユニコード規格に必要なストリ ング・リテラルであり、C Standards Committee に承認されています。以前は、UTF-16 文字は、unsigned short で、 UTF-32 文字は unsigned int で表されました。
u-literals および U-literals のサポートは、ワイド文字リテラルのサポートに似ています。
U'c-char-sequence'
U'c-char-sequence'
例えば、次のようにします。
uint_least16_t msg[] = u"ucs characters ¥u1234 and ¥U81801234 ";
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" |
これらの規則が再帰的に適用され、複数の連結が許可されます。
関連参照