最近搬家到javaeye了,将以前的日志也搬来几个:
var i="中国a";
一般情况下,我们用i.length会得到结果3
但有时候我们需要5,下面的小代码可以解决问题
<script> alert (fucCheckLength("中国aaaa")); function fucCheckLength(strTemp) { var i,sum; sum=0; for(i=0;i<strTemp.length;i++) { if ((strTemp.charCodeAt(i)>=0) && (strTemp.charCodeAt(i)<=255)) sum=sum+1; else sum=sum+2; } return sum; } </script>
会得到结果是:8
1 楼
skydream
2008-01-13
有时候我们需要5?
你是指要得到的字节长度吧?请注意字节和字符的差异。而字节长度是和编码有关系的,比如"中国a",gbk/gb2312编码是5个字节,可是如果是utf-8,则是7个字节(utf-8下通常一个汉字3个字节)。
楼主似乎对字节长度的概念还不是很清楚,虽然一般情况下汉字字符大都使用gbk。但是不能把汉字和2个字节直接划上等号。
假设后台数据库是采用utf-8保存数据,表结构中某个字段的长度是30个字节,那么用楼主你的这个函数,长度计算就出问题了。
你是指要得到的字节长度吧?请注意字节和字符的差异。而字节长度是和编码有关系的,比如"中国a",gbk/gb2312编码是5个字节,可是如果是utf-8,则是7个字节(utf-8下通常一个汉字3个字节)。
楼主似乎对字节长度的概念还不是很清楚,虽然一般情况下汉字字符大都使用gbk。但是不能把汉字和2个字节直接划上等号。
假设后台数据库是采用utf-8保存数据,表结构中某个字段的长度是30个字节,那么用楼主你的这个函数,长度计算就出问题了。
2 楼
nooalou
2008-01-13
skydream 写道
有时候我们需要5?
你是指要得到的字节长度吧?请注意字节和字符的差异。而字节长度是和编码有关系的,比如"中国a",gbk/gb2312编码是5个字节,可是如果是utf-8,则是7个字节(utf-8下通常一个汉字3个字节)。
楼主似乎对字节长度的概念还不是很清楚,虽然一般情况下汉字字符大都使用gbk。但是不能把汉字和2个字节直接划上等号。
假设后台数据库是采用utf-8保存数据,表结构中某个字段的长度是30个字节,那么用楼主你的这个函数,长度计算就出问题了。
你是指要得到的字节长度吧?请注意字节和字符的差异。而字节长度是和编码有关系的,比如"中国a",gbk/gb2312编码是5个字节,可是如果是utf-8,则是7个字节(utf-8下通常一个汉字3个字节)。
楼主似乎对字节长度的概念还不是很清楚,虽然一般情况下汉字字符大都使用gbk。但是不能把汉字和2个字节直接划上等号。
假设后台数据库是采用utf-8保存数据,表结构中某个字段的长度是30个字节,那么用楼主你的这个函数,长度计算就出问题了。
对于技术,谁也不能说一定比谁强,我建议只要就问题讨论就好,不要评价别人的能力,这样就显得狭隘了。
你所说的是一方面,我所说的是另一方面,发帖子就是希望当朋友们遇到了我所说的情况下,可以有个可以参考和借鉴的例子就好。大家就是你帮我我帮你嘛。
如果我们系统的数据库真如你所说的情况,想必大家用一下就会知道结果对不对了,没必要非给出个一定对或一定不对的结论,难道代码中还要加上更多判断不成,合适就好。
Take it easy!
3 楼
skydream
2008-01-13
楼主太激动了,我并没有评价你的能力,只是善意的指出一个汉字==长度2这个观点的由来和可能存在的问题而已。
在我开发的项目中,的确存在后台数据库采用utf-8,造成前台js在检测字符串长度是否超过数据库容许时需要将汉字长度计算为3的情况。
在我开发的项目中,的确存在后台数据库采用utf-8,造成前台js在检测字符串长度是否超过数据库容许时需要将汉字长度计算为3的情况。
4 楼
chsenr
2008-12-16
skydream 写道
楼主太激动了,我并没有评价你的能力,只是善意的指出一个汉字==长度2这个观点的由来和可能存在的问题而已。
在我开发的项目中,的确存在后台数据库采用utf-8,造成前台js在检测字符串长度是否超过数据库容许时需要将汉字长度计算为3的情况。
在我开发的项目中,的确存在后台数据库采用utf-8,造成前台js在检测字符串长度是否超过数据库容许时需要将汉字长度计算为3的情况。
呵呵,其实你从数据库来考虑是有一定道理的。但是这段代码的作用甚至有可能跟数据库完全没有关系。比如,用户呢称,从显示角度 ,如果要简单的限制一下总体长度,可以这样做,因为一个英文字符的宽度大概是半个汉字的宽度。
5 楼
samm
2008-12-24
chsenr 写道
skydream 写道
楼主太激动了,我并没有评价你的能力,只是善意的指出一个汉字==长度2这个观点的由来和可能存在的问题而已。
在我开发的项目中,的确存在后台数据库采用utf-8,造成前台js在检测字符串长度是否超过数据库容许时需要将汉字长度计算为3的情况。
在我开发的项目中,的确存在后台数据库采用utf-8,造成前台js在检测字符串长度是否超过数据库容许时需要将汉字长度计算为3的情况。
呵呵,其实你从数据库来考虑是有一定道理的。但是这段代码的作用甚至有可能跟数据库完全没有关系。比如,用户呢称,从显示角度 ,如果要简单的限制一下总体长度,可以这样做,因为一个英文字符的宽度大概是半个汉字的宽度。
呵呵,为什么限制长度呢,就是因为数据的长度设置好了
6 楼
longrm
2008-12-25
skydream 写道
有时候我们需要5?
你是指要得到的字节长度吧?请注意字节和字符的差异。而字节长度是和编码有关系的,比如"中国a",gbk/gb2312编码是5个字节,可是如果是utf-8,则是7个字节(utf-8下通常一个汉字3个字节)。
楼主似乎对字节长度的概念还不是很清楚,虽然一般情况下汉字字符大都使用gbk。但是不能把汉字和2个字节直接划上等号。
假设后台数据库是采用utf-8保存数据,表结构中某个字段的长度是30个字节,那么用楼主你的这个函数,长度计算就出问题了。
你是指要得到的字节长度吧?请注意字节和字符的差异。而字节长度是和编码有关系的,比如"中国a",gbk/gb2312编码是5个字节,可是如果是utf-8,则是7个字节(utf-8下通常一个汉字3个字节)。
楼主似乎对字节长度的概念还不是很清楚,虽然一般情况下汉字字符大都使用gbk。但是不能把汉字和2个字节直接划上等号。
假设后台数据库是采用utf-8保存数据,表结构中某个字段的长度是30个字节,那么用楼主你的这个函数,长度计算就出问题了。
这个问题该怎么解决?
7 楼
liucl_tiger
2008-12-25
这是JS中的,请问有没有在java中的呢?