Web Artisan Blog - ウェブ アルチザン ブログ

ASP:全角・半角を考慮した文字数(バイト数)取得例:Len、LenB

ASP・VB・Excel

2004年08月24日

アフィリエイトから企業サイト分析まで。訪問者の動きがまるわかりのアクセス解析サービス「リサーチアルチザンプロ」

LINEやSkypeみたいなビデオ通話がブラウザだけでできる!オンライン通話サービス「EZ-Interview - イージーインタビュー」

ASPでは、全角(2バイト文字)・半角の区別が出来ない為、
Len・LenB関数を使用しても期待した結果が返ってこない。

半角を1バイト、全角を2バイトとして、
文字のバイト数を取得する関数の一例を以下に記す。

Function funcLenB(p_Str)
On Error Resume Next

 Dim i
 Dim iAscCode
 Dim iCount

 iCount = 0

 If Len(p_Str) = 0 Then
  funcLenB = 0
  Exit Function
 End If
 
 '1文字ずつ処理
 For i = 1 to Len(p_Str)
  iCount = iCount + 1
  '1文字の文字コード取得(Asc関数でシステム既定の文字コード取得)
  iAscCode = Asc(Mid(p_Str, i, 1))
  '※1
  If Len(Hex(iAscCode)) > 2 Then
   iCount = iCount + 1
  End If
 Next

 funcLenB = iCount

End Function



※1・・システム既定の文字コードであれば、半角文字は文字コードの長さが2、全角文字は4(2以上)として判断

○格納形式:Unicodeの場合
文字列”A”・・・格納状態(16進数文字コード)=”4100”
文字列”B”・・・格納状態(16進数文字コード)=”4200”
文字列”あ”・・・格納状態(16進数文字コード)=”4230”
文字列”い”・・・格納状態(16進数文字コード)=”4430”

○格納形式:ANSIの場合
文字列”A”・・・格納状態(16進数文字コード)=”41”
文字列”B”・・・格納状態(16進数文字コード)=”42”
文字列”あ”・・・格納状態(16進数文字コード)=”82A0”
文字列”い”・・・格納状態(16進数文字コード)=”82A2”

(実行結果)

funcLenB("あ")・・・返却値=2
funcLenB("A")・・・返却値=1




<関連記事>
ASPでの全角と半角の扱い

<参考記事>
[XL97]Unicode と 文字列操作関数の留意点


Web面接に最適。ブラウザだけでビデオ/音声通話ができるオンライン通話サービス。「EZ-Interview - イージーインタビュー」
訪問者録画機能も付いたシンプルで高機能なリアルタイムアクセス解析「リサーチアルチザンプロ」