ヘッダー
C# サンプル集
 

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

2022/8/21

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

 

「𩸽」 の Unicodeの文字コード(コードポイント) を取得する

int code = "𩸽".EnumerateRunes().First().Value;

//桁数にこだわりがない場合
string hexCode = $"{code:X}";
System.Diagnostics.Debug.WriteLine(hexCode); //29E3D

//8桁に固定したい場合
string hex8Code = $"{code:X8}";
System.Diagnostics.Debug.WriteLine(hex8Code); //00029E3D

Debug.WriteLineが表示される場所

 

これでもできます。

byte[] bytes = System.Text.Encoding.UTF32.GetBytes("𩸽");
int code = BitConverter.ToInt32(bytes);

//桁数にこだわりがない場合
string hexCode = $"{code:X}";
System.Diagnostics.Debug.WriteLine(hexCode); //29E3D

//8桁に固定したい場合
string hex8Code = $"{code:X8}";
System.Diagnostics.Debug.WriteLine(hex8Code); //00029E3D

Debug.WriteLineが表示される場所

 

 

「安」のShift_JISの文字コード を取得する

この例を実行すると 「安」の文字コードを16進数で 88C0 と出力します。

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

var sjis = System.Text.Encoding.GetEncoding("shift_jis");
byte[] bytes = sjis.GetBytes("安");

if (bytes.Length == 1)
{
    //いわゆる半角文字の場合
    byte code = bytes[0];
    string hexCode = $"{code:X}";
    System.Diagnostics.Debug.WriteLine(hexCode);
}
else
{
    //2バイトの場合 = いわゆる全角文字の場合
    short code = BitConverter.ToInt16(bytes.Reverse().ToArray());
    string hexCode = $"{code:X}";
    System.Diagnostics.Debug.WriteLine(hexCode); //88C0
}

Debug.WriteLineが表示される場所

 

これでもできます。この例では、半角文字も全角文字も場合分けしないで使用できるので行数が少なくて済みます。

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

var sjis = System.Text.Encoding.GetEncoding("shift_jis");
byte[] bytes = sjis.GetBytes("安").Prepend((byte)0).TakeLast(2).Reverse().ToArray();
short code = BitConverter.ToInt16(bytes);

string hexCode = $"{code:X}";
System.Diagnostics.Debug.WriteLine(hexCode); //88C0

Debug.WriteLineが表示される場所

 

 

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

方法 評価
(※1)
備考
Encoding.UTF32.GetBytes A 複数の文字を変換可能
String.EnumerateRunes A 複数の文字を変換可能。使いやすい。
Char.ConvertToUtf32 B BMP以外の文字はサロゲートペアとして指定する必要がある。
単純に1文字からコードポイントを取得できない。
Runeのコンストラクター B BMP以外の文字はサロゲートペアとして指定する必要がある。
単純に1文字からコードポイントを取得できない。
(int)'字' 方式のキャスト C BMP以外の文字には使用できない。

※1:評価の目安

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

B: 面倒ですが、これでも問題ないです。

C: 役に立つときもありますが、使用に注意が必要なので手を出さない方が無難です。