C# サンプル集 |
Visual Basic 中学校 > C# サンプル集 > C# サンプル集目次 >
文字コードから文字を取得する
2022/8/21
→ Visual Basic のサンプルに切り替える → Python のサンプルに切り替える
目次
Unicode の文字コード(コードポイント) 29E3D の文字を取得する
string st = System.Text.Encoding.UTF32.GetString(BitConverter.GetBytes(0x29E3D));
System.Diagnostics.Debug.WriteLine(st); //𩸽
これでもできます。
string st = char.ConvertFromUtf32(0x29E3D);
System.Diagnostics.Debug.WriteLine(st); //𩸽
メモ:Char.ConvertFromUtf32 で コードポイント D800 ~ DFFF を指定するとArgumentOutOfRangeExceptionの例外になります。この範囲はサロゲート領域で、単独では文字は割り当てられていません。
これでもできます。
var rune = new System.Text.Rune(0x29E3D);
string st = rune.ToString();
System.Diagnostics.Debug.WriteLine(st); //𩸽
メモ: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); //安
参考: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進数で表記しています。