关于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))
结果如预期效果一致!
0
投稿
猜你喜欢
- 在附加数据库后查看不了数据库关系图,也无法建立数据库关系图 我的解决方法如下: 1、设置兼容级别为90(2005为90)(2000为80)
- IE 浏览器中 CSS Expression 特性的最大的问题:会反复执行,每秒钟可能执行了成百上千次,有严重的性能问题。如何对 CSS E
- 一些很实用且必用的js小脚本代码:脚本1:进入页面后自动播放音乐或其它声音文件<embed src="音乐地址&q
- 给静态网页加密的方法有很多,有的简单有的复杂。前两天看见有人问静态网页加密问题,就写了这个代码思路:加密时:先把用户的密钥A用md5加密为B
- 下面是Sql Server 和 Access 操作数据库结构的常用Sql,如如何新建一个表,如何删除表,如何删除数据,插入数据等等..希望对
- 1.在使用MySQL和php的时候出现过中文乱码问题(1) 只要是gb2312,gbk,utf8等支持多字节编码的字符集都可以储存汉字,当然
- <%sql = "select * from SMT_addt
- 升级了浏览器到IE9,今天进入公司网站后台突然发现有些页面进不去了,F12调试显示有JS错误:DOM Exception: INVALID_
- 写在前面的话关于《交互设计实用指南》,我们最近收到很多朋友的反馈,有支持的也有批评的,在此一并感谢了,有你们的关注,我们才能走得更远。《交互
- 微软上周发布了一份关于 Windows Internet Explorer 8 浏览器(以下简称为 IE 8)性能优化的白皮书《Window
- 阅读上一篇:FrontPage XP设计教程4——Css样式表的应用表单在网站的制作过程中是比较常见的,举个简单的例子,我们在申请免费电子信
- 网站域名一般都会选简短易记的,因为这对于网站宣传来说也可以省不少力。而被很多网站忽视的站内Url结构则在一定程度上反映出网站的整体架构。当设
- 1、并双击新建工程窗口中ActiveX DLL图标,VB将自动为项目添加一个类模块,并将该项目类型设置为ActiveX DLL。2、在属性窗
- 新闻系统、blog系统等都可能用到将动态页面生成静态页面的技巧来提高页面的访问速度,从而减轻服务器的压力,本文为大家搜集整理了ASP编程中常
- MaxDB和MySQL是独立的数据库管理服务器。系统间的协同性是可能的,通过相应的方式,系统能够彼此交换数据。要想在MaxDB和MySQL之
- 从本篇开始讲述如何用css实现网页的布局,即如何用css控制网页内各个元素的显示位置。如果你是一个初学者,很可能觉得做一个网页的第一步就是布
- TeX 排版中文字体嵌入问题,兼谈不拘小节的中文字体设计原文:http://yulewang.spaces.live.com/blog/cn
- 一、无组件上传的原理我还是一点一点用一个实例来说明的吧,客户端HTML如下。要浏览上传附件,我们通过<input type="
- 如何准确获知对方来访问的时间和URL?代码如下:logfile.asp<%Dim ValidLog '&n
- select for update 这个是行级锁 当 commit或者rollback时,锁释放 记得打开事务,比如jdbc里面 setAu