在javascript中,一个字母和数字占一个字节,中文占两个字节。可以测试一下:


console.log('abcd1234'.length);//8
console.log('我的博客'.length);//4


因此,假如要计算一个字符串的字节长度,就要区分是否是中文。

我想到的有两种方法:

  1、将中文用两个英文字符替换,比如用"**"替换,然后计算str.lenght;

   2、除了中文,其它字符,比如字母,数字,符号等都是属于ascii码,

       所以charCode应该在0-255之间,如果大于255,那么str.length++即可。


代码实现如下:


//方法一
function getBytes(str){
    str = str.replace(/[^\x00-\xff]/g, '**');//将非ascii码转换为2个ascii码
    return str.length;
}


方法二:


function getBytes(str){
    var bytes= str.length;
    for(var i = bytes; i--;){
        if(str.charCodeAt(i) > 255){
            bytes++;
        }
    }
    return bytes;
}