KB-不可信的LENB函數
在一個Encoding為BIG5的網頁有以下的Code,你覺得結果會是多少?
<script language=vbscript>
S=”中文123”
MsgBox LenB(S)
</script>
依照LenB的定義,S字串的Big5位元組數應為7,多年來我也一直這樣以為。實際跑過,你會發現它的結果是10!! 也就是123也被視為Double Bytes。
在藍色小舖有篇文章證實了這一點,但文中提到的FN_Len函數已經失傳了,所以我試著自己動手寫了一個(希望夠嚴謹,發現有問題的人再回報給我),大家可以參考看看:
如果要用ASP或VBScript組裝固定欄位長度的字串時,要特別留意這個陷阱!
<script language=vbscript>
S=”中文
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