-
08-0716
-
关于截取字符串指定长度的自定义函数很多,各式各样!
不过大多原理都是一个样,循环字符串判断每一个字符的asc码!
我这里也有一个,示例函数如下:
程序代码'*************************************
'切割内容 - 按字符分割
'中文算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编码格式下,上面的这个自定义函数好像就辨认不出中文还是英文了!而在gb2312编码格式下却不存在此问题。
如下:
程序代码dim str : str = CutStr("12345一二三四五",8)
'结果为:str = "12345一二三..."
为什么会出现这样的问题呢?
经查资料终于找到解决方案:
引用内容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。
原文:http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/vblr7/html/vafctasc.asp
发表评论
















- 评论 (0)
- 版权声明
此页仅显示最新5条评论,点击查看全部