utf-8 编码 和 utf-16编码的字符串中一个字符占用的字节数是不同的。
//charset: utf-8 utf-16 function byteLength(str, charset) { var total = 0, charCode, i, len; charset = charset ? charset.toLowerCase() : ""; if(charset === "utf-16" || charset === "utf16"){ for(i=0, len=str.length; i<len; i++){ str.charCodeAt(i) <= 0xffff ? total += 2 : total += 4; } }else{ for(i=0, len=str.length; i<len; i++){ charCode = str.charCodeAt(i); if(charCode <= 0x007f){ total += 1; }else if(charCode <= 0x07ff){ total += 2; }else if(charCode <= 0xffff){ total += 3; }else{ total += 4; } } } return total; }
从代码中可以看到 charset utf-8 和 utf-16 计算方式是不一样的。