hit counter for blogger

黑暗執行緒

 黑暗執行緒搬新家囉!! http://www.darkthread.net

8/29/2006

KB-不可信的LENB函數

在一個Encoding為BIG5的網頁有以下的Code,你覺得結果會是多少?
<script language=vbscript>

S=中文123

MsgBox LenB(S)

</script>


依照LenB的定義,S字串的Big5位元組數應為7,多年來我也一直這樣以為。實際跑過,你會發現它的結果是10!! 也就是123也被視為Double Bytes。


在藍色小舖有篇文章證實了這一點,但文中提到的FN_Len函數已經失傳了,所以我試著自己動手寫了一個(希望夠嚴謹,發現有問題的人再回報給我),大家可以參考看看:


'取代LENB傳回BIG5字串的正確位元組數
Function GetBytesCount(S) 

    Dim I,C,A

    C=0

    For I=1 To Len(S)

       A=ASC(Mid(S,I,1))

       C=C+1

       '如果是ASC 0-255,表示為Single Byte

       '否則為Double Byte,算雙位元組

       If (A>255 OR A<0) THEN C=C+1

    Next

    GetBytesCount=C

End Function

如果要用ASP或VBScript組裝固定欄位長度的字串時,要特別留意這個陷阱!

0 Comments:

Post a Comment

<< Home