Code
function get_lengthstr(str,length)
dim resultstr
resultstr=""
t=0
if len(str)<=length then
resultstr=str
else
strlen=len(str)
getlen=cint(length)*2
For slen = 1 To strlen
chrA = Mid(str, slen, 1)
If Asc(chrA) >= 0 And Asc(chrA) <= 255 Then
t=t+1
Else
t=t+2
End If
If t>=cint(getlen) Then
resultstr=left(str,slen)&""
Exit for
Else
resultstr=str
End If
'response.Write(t & "<br>")
Next
end if
get_lengthstr=resultstr
end function
上面这个函数是我经常用来截取字符串长度用的,其中还区分了中英文。今天当我再次使用的时候发现截取的长度不对了,中文和英文没有区别了(原来设计的是2个英文相当于一个中文,为了保持长度大致相等)。
function get_lengthstr(str,length)
dim resultstr
resultstr=""
t=0
if len(str)<=length then
resultstr=str
else
strlen=len(str)
getlen=cint(length)*2
For slen = 1 To strlen
chrA = Mid(str, slen, 1)
If Asc(chrA) >= 0 And Asc(chrA) <= 255 Then
t=t+1
Else
t=t+2
End If
If t>=cint(getlen) Then
resultstr=left(str,slen)&""
Exit for
Else
resultstr=str
End If
'response.Write(t & "<br>")
Next
end if
get_lengthstr=resultstr
end function
经过测试发现,其中asc对于中文得到的结果都是1,但原来我确实应用过,也是没错的。
查证了一些vb脚本的帮助才发现,原来是由于文件编码的问题引起的。asc在ANSI编码下面是对的,但在unicode编码下面就错了,我今天应用的正好是utf-8的编码,所以就不对了。只要把asc改成ascw就可以了。
下面是帮助文档的说明:
AscB 函数和包含字节数据的字符串一起使用。AscB 不是返回第一个字符的字符代码,而是返回首字节。AscW 是为使用 Unicode 字符的 32 位平台提供的。它返回 Unicode (宽型)字符代码,因此可以避免从 ANSI 到 Unicode 的代码转换。