鷲ノ巣

C# とか PowerShell とか。当ブログの記事は(特に公開直後は)頻繁に改定される場合があることをご了承ください。

C# の文字リテラル

C# で文字(列)リテラルを、Unicode のコード ポイントで表現したい場合、いくつかの書き方があるので注意が必要です。
正直、わかりにくいです。

x 表記

'\x41' のように、\x に続けて 16 進数の数字を 1 ~ 4 桁の範囲で指定します。
つまり表せる範囲は '\x0000' ~ '\xFFFF' までです。
先頭の 0 は省略できます。

u 表記

'\u0041' のように、\u に続けて 16 進数の数字を 4 桁で指定します。
先頭の 0 は省略できません。
表せる範囲は x と同じで '\u0000' ~ '\uFFFF' までです。

U 表記

"\U0001FFFF" のように、\U に続けて 16 進数の数字を 8 桁で指定します。
先頭の 0 は省略できません。

この書き方には注意が必要です。
値の範囲が U+0000 ~ U+FFFF までの場合、1 文字の char 型で表せます。
つまり、'\U00000000' ~ '\U0000FFFF' までは、シングル クォーテーションで囲むことができます。

.NET の char 型は UTF-16 なので、U+10000 を超える範囲は 1 文字の char では表すことができず、サロゲート ペアを使わなければなりません。
この場合、string 型を使う必要がありますので、"\U00020B9F" のように、ダブル クォーテーションで囲まなければなりません。*1

x 表記と u 表記の注意

もう一度言いますが、x と u は最大 4 桁まで(u は常に 4 桁固定)しか指定できません。
そのため、x が可変長だからといって "\x20B9F" と書くと、コンパイル エラーにはならず、文字 '\x20B9' に 'F' がくっついた文字列になります。*2
また、u と U を取り違えて "\u0002B09F" と書くと、文字 U+0002 に、文字列 "B09F" がくっついたものになります。

コード ポイントから文字列に変換する

char.ConvertFromUtf32 メソッドが使えます。
char クラスのくせに戻り値は string です。

*1:\U00020B9F は「𠮟」という文字です。

*2:"₹F" になります。"₹" (U+20B9) はひらがなの「き」に似ていますが、インドの通貨であるルピーの記号だそうです。