C# 言語の仕様
2.4.1 Unicode 文字エスケープ シーケンス
Unicode 文字のエスケープ シーケンスは Unicode 文字を表します。Unicode 文字エスケープ シーケンスは、識別子 (2.4.2 を参照)、文字リテラル (2.4.4.4 を参照)、および標準のリテラル文字列 (2.4.4.5 を参照) の中で処理されます。これ以外の場所 (演算子、区切り記号、キーワードなどを構成する場所など) では、Unicode 文字エスケープは処理されません。
- unicode-escape-sequence:
- \u hex-digit hex-digit hex-digit hex-digit
\U hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit hex-digit
Unicode エスケープ シーケンスは、"\u" または "\U" という文字とその後に続く 16 進数で構成され、1 つの Unicode 文字を表します。C# では、文字および文字列の中では Unicode コード ポイントの 16 ビット エンコーディングが使われるため、U+10000 ~ U+10FFFF の範囲の Unicode 文字は、文字リテラルの中では使用できず、リテラル文字列の中では Unicode サロゲート ペアを使って表されます。コード ポイントが 0x10FFFF より大きい Unicode 文字は、サポートされていません。
2 段階以上の変換は行われません。たとえば、リテラル文字列 "\u005Cu005C" は、"\" ではなく "\u005C" に相当します。Unicode 値の \u005C は文字 "\" です。
次に例を示します。
class Class1
{
static void Test(bool \u0066) {
char c = '\u0066';
if (\u0066)
System.Console.WriteLine(c.ToString());
}
} この例では、\u0066 の使い方がいくつか示されています。\u0066 は、"f" という文字に対するエスケープ シーケンスです。上のプログラムは、次のプログラムと同等です。
class Class1
{
static void Test(bool f) {
char c = 'f';
if (f)
System.Console.WriteLine(c.ToString());
}
}