VB.NET文字列のバイト数を取得する (LenB)

スポンサーリンク

旧システムなどの外部連携のために、テーブルに格納するデータにバイト制限をかける場合があります。良くあるのが、半角を 1 バイト、全角を 2 バイトでカウントして規定の長さに収めるなどです。

System.String クラスの Length プロパティでは文字数しか取得できません。というよりは、半角または全角という概念は消滅しつつあります。(Unicode や UTF-8 の文字コードを参照)

VB6 では LenB という関数で、バイト数を取得できました。StrConv 関数などの合わせ技で文字コードを変えてから、使用していました。

半角は 1 バイト、全角は 2 バイトという考えは、Shift_JIS という文字コードの考えです。つまりは、Shift_JIS にエンコードしてやれば、半角 1 バイト、全角 2 バイトでのバイト数が取得できます。

System.Text.Encoding クラスから GetEncoding メソッドを実行し、ここで Shift_JIS の Encoding のインスタンスを取得します。そのインスタンスから、GetByteCount メソッドを使用することで、Shift_JIS でのバイト数を求めることができます。

サンプルコード

以下にサンプルコードを示します。

VB.NET 全般
Option Strict On

''' -----------------------------------------------------------------------------
''' <summary>
'''     Microsoft.VisualBasic.Strings をカバーした静的クラスです。
''' <summary>
''' -----------------------------------------------------------------------------

Public Class VBStrings

  #Region " LenB メソッド "

    ''' -----------------------------------------------------------------------------------------
    ''' <summary>
    '''     半角 1 バイト、全角 2 バイトとして、指定された文字列のバイト数を返します。</summary>
    ''' <param name="stTarget">
    '''     バイト数取得の対象となる文字列。</param>
    ''' <returns>
    '''     半角 1 バイト、全角 2 バイトでカウントされたバイト数。</returns>
    ''' -----------------------------------------------------------------------------------------
    Public Shared Function LenB(ByVal stTarget As String) As Integer
        Return System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(stTarget)
    End Function

  #End Region

End Class

使用例は以下のようになります。

VB.NET 全般
    ' 半角 1 バイト、全角 1 バイトでのバイト数を取得する
    Dim iByteCount As Integer = VBStrings.LenB("123ABC")

    ' 取得したバイト数を表示する
    MessageBox.Show(iByteCount.ToString())  '9

関連するリファレンス

準備中です。

スポンサーリンク