Visual Basic サンプル集 |
Visual Basic 中学校 > Visual Basic サンプル集 > Visual Basic サンプル集目次 >
文字から文字コードを取得する
2022/8/21
→ C# のサンプルに切り替える → Python のサンプルに切り替える
「𩸽」 の Unicodeの文字コード(コードポイント) を取得する
Dim code As Integer = "𩸽".EnumerateRunes.First.Value
'桁数にこだわりがない場合
Dim hexCode As String = $"{code:X}"
Debug.WriteLine(hexCode) '29E3D
'8桁に固定したい場合
Dim hex8Code As String = $"{code:X8}"
Debug.WriteLine(hex8Code) '00029E3D
これでもできます。
Dim bytes() As Byte = System.Text.Encoding.UTF32.GetBytes("𩸽")
Dim code As Integer = BitConverter.ToInt32(bytes)
'桁数にこだわりがない場合
Dim hexCode As String = $"{code:X}"
Debug.WriteLine(hexCode) '29E3D
'8桁に固定したい場合
Dim hex8Code As String = $"{code:X8}"
Debug.WriteLine(hex8Code) '00029E3D
「安」のShift_JISの文字コード を取得する
この例を実行すると 「安」の文字コードを16進数で 88C0 と出力します。
#If NETCOREAPP Then
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance)
#End If
Dim sjis = System.Text.Encoding.GetEncoding("shift_jis")
Dim bytes() As Byte = sjis.GetBytes("安")
If bytes.Length = 1 Then
'いわゆる半角文字の場合
Dim code As Byte = bytes(0)
Dim hexCode As String = $"{code:X}"
Debug.WriteLine(hexCode)
Else
'2バイトの場合 = いわゆる全角文字の場合
Dim code As Short = BitConverter.ToInt16(bytes.Reverse.ToArray)
Dim hexCode As String = $"{code:X}"
Debug.WriteLine(hexCode) '88C0
End If
これでもできます。この例では、半角文字も全角文字も場合分けしないで使用できるので行数が少なくて済みます。
#If NETCOREAPP Then
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance)
#End If
Dim sjis = System.Text.Encoding.GetEncoding("shift_jis")
Dim bytes() As Byte = sjis.GetBytes("安").Prepend(0).TakeLast(2).Reverse.ToArray
Dim code As Short = BitConverter.ToInt16(bytes)
Dim hexCode As String = $"{code:X}"
Debug.WriteLine(hexCode) '88C0
参考:文字からUnicodeのコードポイントを取得する方法の比較
方法 | 評価 (※1) |
備考 |
---|---|---|
Encoding.UTF32.GetBytes | A | 複数の文字を変換可能 |
String.EnumerateRunes | A | 複数の文字を変換可能。使いやすい。 |
Char.ConvertToUtf32 | B | BMP以外の文字はサロゲートペアとして指定する必要がある。 単純に1文字からコードポイントを取得できない。 |
Runeのコンストラクター | B | BMP以外の文字はサロゲートペアとして指定する必要がある。 単純に1文字からコードポイントを取得できない。 |
AscW | C | BMP以外の文字はサロゲートペアで表現した時の上位サロゲートのコードポイントを取得するのみ。 |
※1:評価の目安
A: これを使っておけばよいと思います。よくわからない人はこれを使いましょう。
B: 面倒ですが、これでも問題ないです。
C: 役に立つときもありますが、使用に注意が必要なので手を出さない方が無難です。
VB6では
Asc と AscW や StrConv での Unicode 変換などを組み合わせます。