关于utf-8格式中截取中英文字符串长度无效的问题
作者:hayden 来源:烦恼's BLOG 发布时间:2008-11-25 14:00:00
标签:utf-8,编码,字符串,中文
关于截取字符串指定长度的自定义函数很多,各式各样!
不过大多原理都是一个样,循环字符串判断每一个字符的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))
结果如预期效果一致!


猜你喜欢
- 1、使用argparse组件,获取命令行参数;使用re组件,获取需要查找的字符串所在行2、使用pandas组件,对文件进行排序。3、命令行执
- 本次实验利用到了cv2中的createTrackbar和getTrackbarPos函数实现一个绘图板的功能,用户可以选择矩形或是画笔模式,
- ip正则式为:r'(([12][0-9][0-9]|[1-9][0-9]|[1-9])\.){3,3}([12][0-9][0-9]
- MYSQL在一个字段值前面加字符窜,如下:member 表名card 字段名update member SET card = '00
- Numpy是什么很简单,Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。
- 本文实例讲述了Python实现合并两个有序链表的方法。分享给大家供大家参考,具体如下:思路:先选出第一个节点,然后遍历两个链表,把小的作为当
- python各类经纬度转换,具体代码如下所示:import mathimport urllibimport jsonx_pi = 3.141
- 本文实例讲述了PHP采集静态页面并把页面css,img,js保存的方法。分享给大家供大家参考。具体分析如下:这是一个可以获取网页的html代
- 什么是闭包:闭包是一个存在内部函数的引用关系。该引用指向的是外部函数的局部变量对象(前提是内部函数使用了外部函数的局部变量)闭包的作用:延长
- 近来,随着XHTML(可扩展HTML)标准的出现,<script/>标签也经历了一些改变。该标签不再用language特性,而用
- 背景随着业务的发展,公司业务和规模不断扩大,网站积累了大量的用户信息和数据,对于一家互联网公司来说,用户和业务数据是根基。一旦公司的数据错乱
- 首先给大家分享一个个人在使用python的ctypes调用c库的时候遇到的一个小坑这次出问题的地方是一个C函数,返回值是malloc生成的字
- 这里的Counter是指collections中的Counter,通过Counter可以实现字典的创建以及字典key出现频次的统计。然而,使
- 本文实例讲述了python flask框架实现重定向功能。分享给大家供大家参考,具体如下:flask 重定向:from flask impo
- 非常不错,大家可以自己应用下。<% '//数据处理部分 dim Content,Num,I,st
- 本文为大家分享了pygame游戏之旅的第5篇,供大家参考,具体内容如下在游戏中添加显示文字:这里自己定义一个crash函数接口:def cr
- 本文实例讲述了python通过apply使用元祖和列表调用函数的方法。分享给大家供大家参考。具体实现方法如下:def my_fuc(a, b
- ASPError Object 这个新增的,内置与ASP 3.0中的对象提供了一个以往版本中没有的专门用来处理错误的对象,这样,我们来操纵错
- 解决window.open后返回object的错误 <a href="javascript:void(window.open
- 本文实例讲述了Python实现随机创建电话号码的方法。分享给大家供大家参考,具体如下:当需要随机的生成一些电话号码的时候,可以使用以下脚本,