兼容UTF-8和GBK编码的ASP文字截取函数
出处:泡泡网络教程 [ http://www.hugo8.com ]
最近在网上搜索了下文字截取的函数,发现以下代码出现的几率非常高,于是便测试了一下。
以下代码来源网络: '************************************* '切割内容 - 按字符分割 '中文算2个字符 '************************************* Function CutStr(byVal Str,byVal StrLen) Dim l,t,c,i If IsNull(Str) Then CutStr="":Exit Function l=Len(str) StrLen=int(StrLen) t=0 For i=1 To l c=Asc(Mid(str,i,1)) If c >= 0 And c <= 255 Then t=t+1 Else t=t+2 IF t>StrLen Then CutStr=left(Str,i-1)&"..." Exit For Else CutStr=Str End If Next End Function |
将整站转换成UTF-8编码时,这个函数不能使用了。因为很明显,他的判断方法是 if asc(mid(str,x,1)) < 0 Then ,而非ASCII编码的页面中,ASC函数也就失去了作用。于是查找了相关的资料,终于找到解决方案:
Asc 返回输入字符的代码数据点或字符代码。对于单字节字符集 (SBCS),返回值范围为 0 到 255;对于双字节字符集 (DBCS),返回值范围为 -32768 到 32767。返回值取决于当前线程的代码页,该代码页包含在 TextInfo 类的 ANSICodePage 属性中。可以通过指定 System.Globalization.CultureInfo.CurrentCulture.TextInfo.ANSICodePage 来获得 TextInfo.ANSICodePage。
AscW 返回输入字符的 Unicode 代码数据点。返回值范围为 0 到 65535。返回值与当前线程的区域性和代码页设置无关。
注意 对于字节,Visual Basic 早期版本的 AscB 函数返回的是代码,而不是字符。它主要用于在双字节字符集 (DBCS) 应用程序中转换字符串。所有 Visual Basic .NET 字符串均采用 Unicode 的形式,并且不再支持 AscB。
也就是说,在utf-8编码格式下,需要用AscW来“辨认”中英文才行!
至此,将上面CutStr函数中
以下是引用片段: c=Asc(Mid(str,i,1)) |
修改为
以下是引用片段: c=AscW(Mid(str,i,1)) |
结果如预期效果一致!
相关演示如本网站侧边栏文章列表,截取自定义长度,中文为两字符!
附Asc函数的相关知识:
|