兼容UTF-8和GBK编码的ASP文字截取函数

ASP新手入门

最近在网上搜索了下文字截取的函数,发现以下代码出现的几率非常高,于是便测试了一下。


'************************************* '切割内容 - 按字符分割 '中文算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函数的相关知识:

以下是引用片段: Asc 函数        返回与字符串的第一个字母对应的 ANSI 字符代码。  Asc(string)     string 参数是任意有效的字符串表达式。如果 string 参数未包含字符,则将发生运行时错误。  说明  下面例子中, Asc 返回每一个字符串首字母的 ANSI 字符代码:  Dim MyNumber  MyNumber = Asc("A")       ''返回 65。  MyNumber = Asc("a")       ''返回 97。  MyNumber = Asc("Apple")   ''返回 65。  注意    AscB 函数和包含字节数据的字符串一起使用。AscB 不是返回第一个字符的字符代码,而是返回首字节。AscW 是为使用 Unicode 字符的 32 位平台提供的。它返回 Unicode (宽型)字符代码,因此可以避免从 ANSI 到 Unicode 的代码转换。


相关内容推荐

周的天数

想在asp显示当前一周有多少天吗?这个代码会把握住今天的值和利用到案例选择显示一周的天数。 % date_value = date() %%= date_value %br% dayofweek=weekday(date_value) %day number in week %= dayofweek %br%

编写第一个ASP程序

现在有很多关于ASP编程的教程。其中有些是对于你有帮助,有些完全没有用。甚至有些写得是误人子弟。无论如何,你读过一些关于ASP的内容,现在你已经准备好构建第一个应用程序。

ASP-条件语句

有时,当我们写代码时,我们要为作出不同的决定而执行不同的操作。我们可以使用条件语句中的代码来做到这一点。条件语句是一套用于执行基于不同条件的不同动作的命令。 为了支

ASP表单输入到HTML

ASP能写.html或者任何其他的直接到web服务器的文档文本(你需要写文本输出到写权限的目录)。这是能够不需要上传PC的文件用户输入即时的发布信息。 下面的例子有四个输入区域(标

asp获取IP地址的函数

FunctionGetIp() DimDulIp,ProIP DulIp=Request.ServerVariables("HTTP_X_FORWARDED_FOR") ProIP=Request.ServerVariables("REMOTE_ADDR") IfDulIp=""Then GetIp=ProIP Else GetIp=DulIp EndIf EndFunction

返回
顶部