ヘッダー
C# サンプル集
 

文字コードから文字を取得する

2022/8/21

→ Visual Basic のサンプルに切り替える → Python のサンプルに切り替える

 

Unicode の文字コード(コードポイント) 29E3D の文字を取得する

string st = System.Text.Encoding.UTF32.GetString(BitConverter.GetBytes(0x29E3D));

System.Diagnostics.Debug.WriteLine(st); //𩸽

Debug.WriteLineが表示される場所

 

これでもできます。

string st = char.ConvertFromUtf32(0x29E3D);

System.Diagnostics.Debug.WriteLine(st); //𩸽

Debug.WriteLineが表示される場所

メモ:Char.ConvertFromUtf32 で コードポイント D800 ~ DFFF を指定するとArgumentOutOfRangeExceptionの例外になります。この範囲はサロゲート領域で、単独では文字は割り当てられていません。

 

これでもできます。

var rune = new System.Text.Rune(0x29E3D);
string st = rune.ToString();

System.Diagnostics.Debug.WriteLine(st); //𩸽

Debug.WriteLineが表示される場所

メモ:Runeのコンストラクターでコードポイント D800 ~ DFFF を指定するとArgumentOutOfRangeExceptionの例外になります。この範囲はサロゲート領域で、単独では文字は割り当てられていません。

 

 

Shift_JISの文字コード 88C0 の文字を取得する

#if NETCOREAPP
    System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
#endif

int code = 0x88C0;

var sjis = System.Text.Encoding.GetEncoding("shift_jis");
string st = sjis.GetString(BitConverter.GetBytes(code).Reverse().ToArray()).Last().ToString();

System.Diagnostics.Debug.WriteLine(st); //安

Debug.WriteLineが表示される場所

 

 

参考:Unicodeのコードポイントから文字を取得する方法の比較

方法 評価
(※1)
変換可能な範囲
(※2)
備考
Encoding.UTF32.GetString A すべて
(0000 ~ 10FFFF)
複数の文字を変換可能
char.ConvertFromUtf32 B 0000 ~ D7FF
E000 ~ 10FFFF
 
Runeのコンストラクター B 0000 ~ D7FF
E000 ~ 10FFFF
2019年に追加された新機能
\u9999 形式などのリテラル C 0000 ~ FFFF  
Convert.ToChar C 0000 ~ D7FF
E000 ~ FFFF
 
(char)0x9999 形式のキャスト C 0000 ~ FFFF  

※1:評価の目安

A: これを使っておけばよいと思います。よくわからない人はこれを使いましょう。

B: これでも問題ないです。D800~DFFFを変換しようとすると例外になりますが、この範囲には通常の文字は割り当てられていないので、例外が発生する方がむしろ親切なときもあります。

C: 役に立つときもありますが、使用に注意が必要なので手を出さない方が無難です。Unicodeの基本多言語面しか対応していないので、一部の絵文字やかなり難しい一部の漢字など対応していない文字があります。

※2:Unicodeのコードポイント。16進数で表記しています。