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