プログラミング言語 C の新機能 Part X: LEX#0:ユニバーサルキャラクタ名
(1999/05/02 [日])
今までの C 言語では、文字列や文字定数の中に直接文字コードの値を指定することが可能でした。例えば、"\x0d\x0a" や '\0' のような記述方法です。しかし、C 言語が wchar_t といったワイドキャラクタを含むように拡張された後、wchar_t の文字コードを直接指定する方法は決められていませんでした。
今度の C 言語ではその方法が規定され記述できるようになりました。文字コードとしては ISO/IEC 10646、 いわゆる UNICODE が想定されています。この記述法は仕様ではユニバーサルキャラクタ名(universal character name)と名づけられており、プログラミング言語 Java での記述によく似ています。具体的な記述方法は次の通りです。
ところで、サロゲート(surrogate)って知ってますか? UNICODE は世界中のすべての文字を 16 bit の中に入れようとして作っていました。しかし、わかっていたことではありますが、やはり 16 bit にすべて押し込むことは無理でした。そこで仕方が無いのである特定の文字部分ではさらにもう一文字追加して、32 bit で一文字をあらわすことにしました。その特定の領域の部分をサロゲートといい、それを使った文字をサロゲートペアによる指定などといいます。
今度の C 言語ではその方法が規定され記述できるようになりました。文字コードとしては ISO/IEC 10646、 いわゆる UNICODE が想定されています。この記述法は仕様ではユニバーサルキャラクタ名(universal character name)と名づけられており、プログラミング言語 Java での記述によく似ています。具体的な記述方法は次の通りです。
表記 | 説明 |
---|---|
\uxxxx | x:16進数,4桁固定,\U0000xxxxと同じ意味 |
\Uxxxxxxxx | x:16進数,8桁固定 |
注意 識別名、文字定数、文字リテラルに使用可能 キャラクタセット中の文字で表現できるのならこの表記を使うべきではない 識別名として、 \u0000-\u0020 制御 空白(0x20) \u007f-\u009f 制御 \ud800-\udfff サロゲート(surrogate) の文字を使用すべきでない。 |
ところで、サロゲート(surrogate)って知ってますか? UNICODE は世界中のすべての文字を 16 bit の中に入れようとして作っていました。しかし、わかっていたことではありますが、やはり 16 bit にすべて押し込むことは無理でした。そこで仕方が無いのである特定の文字部分ではさらにもう一文字追加して、32 bit で一文字をあらわすことにしました。その特定の領域の部分をサロゲートといい、それを使った文字をサロゲートペアによる指定などといいます。
by seclan