VBScript - 文字数、バイト数を取得する | Len, LenB 関数

文字列の文字数、バイト数を取得する方法を説明する。

文字数の取得

文字列の文字数を取得するには `Len` 関数を使う。

Len(string)

string には文字列を指定する。

関数は文字列の文字数を返す。


例:半角でも全角でも同じ文字数が返される

WScript.Echo Len("Hello World!")
' → 12

WScript.Echo Len("Hello World!")
' → 12


バイト数の取得(Unicode)

文字列のバイト数を取得するには `LenB` 関数を使う。

LenB(string)

string には文字列を指定する。

関数は文字列のバイト数を返す。
ただし、シフトJISではなく Unicode で計算したバイト数が返る点に留意すること。

VBScript はデータを内部的に Unicode (UTF-16 LE) で持つ。
Unicode は(基本的に)1文字を2バイトで表す。
半角でも全角でも1文字あたり2バイトで計算したバイト数が返る。


例:半角でも全角でも同じバイト数が返される

WScript.Echo LenB("Hello World!")
' → 24

WScript.Echo LenB("Hello World!")
' → 24


バイト数の取得(シフトJIS)

シフトJISのバイト数を返す関数は VBScript にはないので、自前で準備する必要がある。

と言ってもそれほど難しい話ではなく。

シフトJISのバイト数を求めるには、文字列の文字単位にバイト数を取得し合計すれば良い。

文字のバイト数は、`Asc` 関数の戻り値と `0xFF00` の論理積から求められる。
0 なら 1 バイト、それ以外なら 2 バイトである。

↓ イメージ

If (Asc(string) And &HFF00) = 0 Then
  ' → 1バイト文字
Else
  '2バイト文字
End If


次の関数は、シフトJISの文字列のバイト数を返す。

Function GetSJISByteCount(str)

  Dim byteCount
  byteCount = 0

  Dim i
  For i = 0 To Len(str) - 1
    Dim ch
    ch = Mid(str, i + 1, 1)

    If (Asc(ch) And &HFF00) = 0 Then
      byteCount = byteCount + 1
    Else
      byteCount = byteCount + 2
    End If
  Next

  GetSJISByteCount = byteCount

End Function


いいなと思ったら応援しよう!