关于utf-8格式中截取中英文字符串长度无效的问题
作者:hayden 来源:烦恼's BLOG 时间:2008-11-25 14:00:00
关于截取字符串指定长度的自定义函数很多,各式各样!
不过大多原理都是一个样,循环字符串判断每一个字符的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
也就是说,在utf-8编码格式下,需要用AscW来“辨认”中英文才行!
至此,将上面CutStr函数中
程序代码
c=Asc(Mid(str,i,1))
修改为
程序代码
c=AscW(Mid(str,i,1))
结果如预期效果一致!
标签:utf-8,编码,字符串,中文
0
投稿
猜你喜欢
如何快速通过XSL转换XML文件
2023-07-02 21:22:40
Python数据存储之 h5py详解
2023-09-18 00:04:48
使用Python批量压缩tif文件操作步骤
2021-03-27 00:04:10
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
2024-01-17 17:53:34
设计模式学习笔记之 - 简单工厂模式
2009-03-11 13:38:00
python中sklearn的pipeline模块实例详解
2021-09-05 00:57:34
Python如何发送与接收大型数组
2022-07-26 06:54:54
Python源码学习之PyObject和PyTypeObject
2023-08-11 10:28:45
Firebox 3 后退后按钮 diasabled 状态不恢复的一个解决方案
2008-11-06 12:28:00
python 获取谷歌浏览器保存的密码
2022-05-21 21:39:49
python将字符串list写入excel和txt的实例
2022-02-28 05:07:01
python用Pygal如何生成漂亮的SVG图像详解
2022-12-12 21:45:22
Windows自动执行python脚本操作步骤
2023-04-22 15:32:42
Python面向对象程序设计类的多态用法详解
2021-05-28 20:21:29
django 解决model中类写不到数据库中,数据库无此字段的问题
2024-01-24 17:52:07
Javascript 注册事件浅析
2024-04-28 10:20:22
python实现简单俄罗斯方块
2022-10-21 07:37:27
使用DW中遇到的常见问题详解
2008-03-18 16:27:00
python简单的函数定义和用法实例
2022-10-07 12:35:03
Oracle数据库表空间超详细介绍
2024-01-17 16:49:22