文字列のバイト数を取得する (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 でのバイト数を求めることができます。
サンプルコード
以下にサンプルコードを示します。
J# 全般
import System.* /******************************************************************************** * * Microsoft.VisualBasic.Strings をカバーした静的クラスです。 * ********************************************************************************/ public class VBStrings { #region LenB メソッド /********************************************************************************* * 半角 1 バイト、全角 2 バイトとして、指定された文字列のバイト数を返します。 * * @param stTarget バイト数取得の対象となる文字列。 * @return 半角 1 バイト、全角 2 バイトでカウントされたバイト数。 *********************************************************************************/ public static final int LenB(final String stTarget) { return System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(stTarget); } #endregion }
使用例は以下のようになります。
J# 全般
// 半角 1 バイト、全角 1 バイトでのバイト数を取得する int iByteCount = VBStrings.LenB("123ABC"); // 取得したバイト数を表示する MessageBox.Show(System.Convert.ToString(iByteCount)); //9
関連するリファレンス
準備中です。