怎么解决VB Script中Len函数的问题

zdg 2000-02-17 02:34:00
Len(str)将计算字符串的长度, 可是将一个汉字计算成一个字符了, 怎么得到真实的字符串长度???也就是一个汉字是两个字符的...
急!急!急!
...全文
471 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zdg 2000-02-28
  • 打赏
  • 举报
回复
peacock的方法最好, 已经应用到主页了...
大家看看是不是对齐了很多...
谢谢大家的帮助...
peacock 2000-02-25
  • 打赏
  • 举报
回复
这里有一个简单的方法:
Function Len_Str(Strs As String) As Long
Dim ReLen As Long
Dim I As Long
ReLen=0
For I=1 To Len(Strs)
'属于ASCII码
If (Asc(Mid$(Strs,I,1))>=0) And (Asc(Mid$(Strs,I,1))<=255) Then
ReLen=ReLen+1
'不'属于ASCII码
Else
ReLen=ReLen+2
End If
Next
Len_Str=ReLen
End Function
Un1 2000-02-25
  • 打赏
  • 举报
回复
支持Tony_Yuan!
Tony_Yuan 2000-02-17
  • 打赏
  • 举报
回复
因为VB使用UNICODE,所以每个字符都占2个字节,
你可以查看每个字的高位字节,若大于0该字符就是汉字,按这个方法可以确定实际字节数,以下是个函数,发现一个汉字就多加一个字节数,你可以根据这个原理来处理你的问题

Public Function GetByteLen(ByVal str As String) As Long
Dim I As Long
Dim a() As Byte
GetByteLen = 0
str = Trim(str)
a = str
For I = UBound(a) To 0 Step -1
If I Mod 2 Then
If a(I) > 0 Then
GetByteLen = GetByteLen + 1
End If
Else
GetByteLen = GetByteLen + 1
End If
Next
End Function
DOU 2000-02-17
  • 打赏
  • 举报
回复
可靠的权宜方法是用VB做一个非常简单ActiveX DLL,实现简单的这方面的几个函数功能,在ASP中调用
TBBT 2000-02-17
  • 打赏
  • 举报
回复
可以用FOR循环,对字符串的每一个字符取ASC码值,如小于0即为中文,大于0为英文
,再累加。
DOU 2000-02-17
  • 打赏
  • 举报
回复
以上例子为VB.
VBScript中没有StrConv函数,惨啦!
DOU 2000-02-17
  • 打赏
  • 举报
回复
对不起,我试了一下,MSDN的做法好象有问题,这样试试:

str = LeftMbcs("中国人Good", 9)

Function LeftMbcs(ByVal StrArg As String, ByVal arg1 As Long) As String
AnsiLeftB = StrConv(LeftB(StrConv(StrArg, vbFromUnicode), arg1), vbUnicode)
End Function

不过如果arg1为单数,可能会出现半边字,比如str = LeftMbcs("中国人Good", 3)
zdg 2000-02-17
  • 打赏
  • 举报
回复
我在ASP中用
Function LenMbcs(str)
LenMbcs = LenB(StrConv(str, vbFromUnicode))
End Function
报错, 说
"类型不匹配: 'StrConv' "
为什么???
DOU 2000-02-17
  • 打赏
  • 举报
回复
应该如此:
Function AnsiStrConv(StrArg, flag)
nsiStrConv = StrConv(StrArg, flag)
End Function

' LeftB ANSI Unicode
Function AnsiLeftB(ByVal StrArg As String, ByVal arg1 As Long) As String
AnsiLeftB = AnsiStrConv(LeftB(AnsiStrConv(StrArg, _
vbFromUnicode), arg1), vbUnicode)
End Function
详细请见MSDN:“Differences in String Function Operations”
zdg 2000-02-17
  • 打赏
  • 举报
回复
DOU, LeftMbcs相应的函数应该怎么写呢???
zdg 2000-02-17
  • 打赏
  • 举报
回复
谢谢, 看来应该用LenMbcs, 可是有相应的LeftMbcs函数吗???
DOU 2000-02-17
  • 打赏
  • 举报
回复
不能使用LenB, 看下面你就会明白

The example uses LenB and a user-defined function (LenMbcs) to return the number of byte characters in a string if ANSI is used to represent the string.

Function LenMbcs (ByVal str as String)
LenMbcs = LenB(StrConv(str, vbFromUnicode))
End Function

Dim MyString, MyLen
MyString = "ABc" '//将 MyString = "中国人Good" 更清楚一些
' Where "A" and "B" are DBCS and "c" is SBCS.
MyLen = Len(MyString) '// 7
' Returns 3 - 3 characters in the string.
MyLen = LenB(MyString) '// 14
' Returns 6 - 6 bytes used for Unicode.
MyLen = LenMbcs(MyString) '// 10
' Returns 5 - 5 bytes used for ANSI.
zdg 2000-02-17
  • 打赏
  • 举报
回复
谢谢, 其实我是想将过长的字符串截掉, 使得显示一样长, 请littletao看看以下函数, 怎么转换的还是不一样长...

function conv(num, str)
conv=str
if lenb(str)>num then conv=left(str, num)+"..."
end function
littletao 2000-02-17
  • 打赏
  • 举报
回复
lenb

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧