ASP 中关于Len()函数的问题:

evelucy 2001-10-23 11:01:44
在VBScript中,使用Len()函数出现了这样一个问题:用Len()测量“汉字”和“英文字母”时,同样数目的汉字,与同样数目的英文字母得的结果是一样的,但其实他们所需的存储空间,汉字是英文字母的两倍,这样在将结果写回数据库时,(如果数据库中某字段的长度定为10),若写入10个英文字母,不会出现溢出错误;但写入10个汉字,则出现溢出错误。
请问能否找到一种方法测出实际所需存储空间的方法?
...全文
1449 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
playking 2001-10-24
  • 打赏
  • 举报
回复
无为,我今天测试了 cstr的方式,结果一样,我是w2k chinese
<html>
<body>
测试

<%
response.write "len(""啊"")---" & len(cstr("啊")) & "<br>"
response.write "len(""a"")---" & len(cstr("a")) & "<br>"
response.write "lenB(""啊"")---" & lenB(cstr("啊")) & "<br>"
response.write "lenB(""a"")---" & lenB(cstr("a"))
%>
</body>
</html>
测试 len("啊")---1
len("a")---1
lenB("啊")---2
lenB("a")---2
karma 2001-10-23
  • 打赏
  • 举报
回复
try
LEN(CSTR("啊"))
LEN(CSTR("a"))
and
LENB(CSTR("啊"))
LENB(CSTR("a"))

tell me the results, thanks
rightyeah 2001-10-23
  • 打赏
  • 举报
回复
这是因为这里用的unicode字符集,每个字符占2个字节,汉字是这样,英文字符也是。
数据库里也很简单(要那种支持unicode或多字节字符集的数据库),用nchar代替char,nvarchar代替varchar,ntext代替text,就可以了
playking 2001-10-23
  • 打赏
  • 举报
回复
LenB 函数与包含在字符串中的字节数据一起使用。LenB 不是返回字符串中的字符数,而是返回用于代表字符串的字节数。
我刚才用lenB()做了一个测试:
<html>
<body>
测试

<%
response.write "len(""啊"")---" & len("啊") & "<br>"
response.write "len(""a"")---" & len("a") & "<br>"
response.write "lenB(""啊"")---" & lenB("啊") & "<br>"
response.write "lenB(""a"")---" & lenB("a")
%>
</body>
</html>

结果如下:
测试 len("啊")---1
len("a")---1
lenB("啊")---2
lenB("a")---2

这样不行!!!
playking 2001-10-23
  • 打赏
  • 举报
回复
我也遇到了这样的问题,但没有办法解决,最后我没办法,我使用了非常低级庸俗的方法:把数据库字段在原有基础上放大4个字节,在输入框中当确定为只可能是汉字是把maxlength设为字段的字节数/2,当不确定是汉字还是字符时,我把maxlength适当放大,这样就不会溢出了,很庸俗是吗?无为的方法我没试过,非常希望他的方法可行,这样可以解决很多问题。、
还有一种方法可以精确的判断:把输入框中的值一个一个的读出来,判断是汉字还是字符,计算总长度,长了就提示用户,这种方法非常麻烦,我从不用。
isNumeric()是否数字
asc(汉字)<0
96<asc(a-z)<123
64<asc(A-Z)<91
你自己各种方法都试试吧!
dongcan 2001-10-23
  • 打赏
  • 举报
回复
无聊的问题!
karma 2001-10-23
  • 打赏
  • 举报
回复
try LenB()
hchxxzx 2001-10-23
  • 打赏
  • 举报
回复
经常看到有人在问同样的问题。
给你一个代码吧。这是我自己编写的一个脚本,专门用来判断文字的长度的。本来用意是判断当文字多到大于想写出的字数时,用“...”来代替,只要稍做一下修改就可以用了。

<script LANGUAGE="VBSCRIPT" runat="server">
function qjbj(bt,zs)
dim i,j,k
i=0
k=len(bt)
for j=1 to k
ascm=asc(mid(bt,j,1))
if ascm<0 or ascm>255 then
i=i+2
else
i=i+1
end if
if i>zs then
bta=left(bt,j) & "..."
exit for
else
bta=bt
end if
next
qjbj=bta
end function
</script>
karma 2001-10-23
  • 打赏
  • 举报
回复
len("啊")---3
len("a")---1
lenB("啊")---6
lenB("a")---2
karma 2001-10-23
  • 打赏
  • 举报
回复
weird, on my machine (w2k Professional, English version ), I got

<%
response.write "len(""啊"")---" & len("啊") & "<br>"
response.write "len(""a"")---" & len("a") & "<br>"
response.write "lenB(""啊"")---" & lenB("啊") & "<br>"
response.write "lenB(""a"")---" & lenB("a")
%>

len("å•Š")---3
len("a")---1
lenB("å•Š")---6
lenB("a")---2

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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