日期:2014-05-16 浏览次数:20533 次
今天再一次的遇到了这样一个问题-----关于字符串的字节长度。我想很多表单多会有这样的需求,比如前段我在做baidu输入法官网上传词库和皮肤的时候,因为输入项有字节限制。
?
当然很多网络上早就处理了,今天只是简单地总结记录一下。
?
?
//删除左右两端空格
//不同于$.trim()
function trim(str){
 return str.replace(/(^\s*)|(\s*$)/g, "");
}; 
//计算字符串字节长度
//关于这个去空格的需求具体可以变动
function getByteLength(str){
     var len=0,
           i,
          arr = trim(str).split(""); //如果没有需求就改为arr = str.split("");
     for(i=0;i<arr.length;i++){
          if(arr[i].charCodeAt(0)<299){
               len ++;
         }else{
              len +=2;
        }
    }
  return len;
}
console.log(getByteLength("w的长度是duo少"));  //14
console.log(getByteLength(" w的长度是duo少 "));   //14
?
?
ps:很多有后端学习经验或者数据库经验的人或者对字符集比较有研究的人会提出:汉字不一定是算2个字节,好吧,这边我们只是约定一下,汉字算两个字节?
?
后来写lib库的时候看到tangram是这样处理的
?
?
/*
*getByteLength  get the source byte length in gbk*
*@function*
*@param {String} source*
*@remak {Number}*
*@remark in gbk length more than 127 is thought two byte*
*/
ZYC.string.getByteLength = function(source){
     return String(source).replace(/[^\x00-\xff]/g,"ci").length;   //ci是可以换到 当成2个字节的就行
};
?
?
ps:这个版本是没有去空格的,在编码为gbk的情况下去计算的。
?
这边随便提一下常见的字符集(来源于http://baike.baidu.com/view/1204863.htm)
?
?