ヘッダー
Visual Basic サンプル集
 

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

2022/8/21

→ C# のサンプルに切り替える → Python のサンプルに切り替える

 

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

VB2019対応 Visual Studio 2022

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

Debug.WriteLineが表示される場所

 

これでもできます。

VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

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

Debug.WriteLineが表示される場所

 

 

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

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

VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

#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

Debug.WriteLineが表示される場所

 

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

VB2015対応 VB2017対応 VB2019対応 Visual Studio 2022

#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

Debug.WriteLineが表示される場所

 

 

参考:文字から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対応 VB6では Asc と AscW や StrConv での Unicode 変換などを組み合わせます。