ASP網(wǎng)站UTF-8編碼/GB2312編碼中字符串截取函數(shù)和獲取長度函數(shù)
網(wǎng)站建設(shè)中,會遇到在GB2312下使用截取文字長度函數(shù),轉(zhuǎn)到UTF-8編碼時(shí),卻不能正常進(jìn)行取值,這是由于UFT-8編碼在計(jì)算字符長度時(shí)不一樣.
本文列舉在GB2312編碼及UFT-8編碼中截取字符串函數(shù):
網(wǎng)站建設(shè):UTF-8編碼截取字符串函數(shù):
********************************
'輸入?yún)?shù):
' 1、文字內(nèi)容
' 2、文字最大長度
*********************************
Public Function CutStr1(Title,TLen)
Dim k,i,d,c
Dim iStr
Dim ForTotalIf CDbl(TLen) > 0 Then
k=0
d=StrLen(Title)
iStr=""
ForTotal = Len(Title)For i=1 To ForTotal
c=Abs(AscW(Mid(Title,i,1)))
If c>255 Then
k=k+2
Else
k=k+1
End IfiStr=iStr&Mid(Title,i,1)
If CLng(k)>CLng(TLen) Then
iStr=iStr&".."
Exit For
End If
NextCutStr1=iStr
Else
CutStr1=""
End If
End Function
網(wǎng)站建設(shè):GB2312編碼截取字符串函數(shù):
********************************
'輸入?yún)?shù):
' 1、文字內(nèi)容
' 2、文字最大長度
*********************************Function CutStr(Str,LenNum)
Dim P_num
Dim I,X
If StrLen(Str)<=LenNum Then
Cutstr=Str
Else
P_num=0
X=0
Do While Not P_num > LenNum-2
X=X+1
If Asc(Mid(Str,X,1))<0 Then
P_num=Int(P_num) + 2
Else
P_num=Int(P_num) + 1
End If
Cutstr=Left(Trim(Str),X)&".."
Loop
End If
End Function*************************************
'取字符串長度函數(shù)*************************************
Function strLen(Str)
If Trim(Str)="" Or IsNull(str) Then Exit Function
Dim P_len,x
P_len=0
StrLen=0
P_len=Len(Trim(Str))
For x=1 To P_len
If Asc(Mid(Str,x,1))<0 Then
StrLen=Int(StrLen) + 2
Else
StrLen=Int(StrLen) + 1
End If
Next
End Function
從上述編碼原理中得出的結(jié)論是:
-
1.每個(gè)英文字母、數(shù)字所占的空間為1 Byte; 2.泛歐語系、斯拉夫語字母占2 Bytes; 3.漢字占3 Bytes。 由此可見UTF8對英文來說是個(gè)非常誘人的方案,但對中文來說則不太合算,無論用ANSI還是 Unicode/UCS2來編碼都只用2 Bytes,但用UTF8則需要3 Bytes。 以下是一些統(tǒng)計(jì)資料,顯示用UTF8來儲存文件每個(gè)字符所需的平均字節(jié): 1.拉丁語系平均用1.1 Bytes; 2.希臘文、俄文、阿拉伯文和希伯萊文平均用1.7 Bytes; 3.其他大部份文字如中文、日文、韓文、Hindi(北印度語)用約3 Bytes; 4.用超過4 Bytes的都是些非常少用的文字符號。