文字列のバイト数を取得する (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
関連するリファレンス
準備中です。