如果您知道字符编码,则可以自己计算。
enpreURIComponent假定UTF-8为字符编码,因此,如果需要该编码,可以这样做,
function lengthInUtf8Bytes(str) { // Matches only the 10.. bytes that are non-initial characters in a multi-byte sequence. var m = enpreURIComponent(str).match(/%[89ABab]/g); return str.length + (m ? m.length : 0);}由于UTF-8编码多字节序列的方式,因此应该可以使用。对于单个字节序列,第一个编码字节始终以零的高位开头,或者第一个十六进制数字为C,D,E或F的字节开始。第二个和后续字节是前两个位为10的字节这些是要在UTF-8中计数的额外字节。
维基百科中的表格更加清晰
Bits Last pre point Byte 1 Byte 2 Byte 3 7 U+007F 0xxxxxxx 11 U+07FF 110xxxxx 10xxxxxx 16 U+FFFF 1110xxxx 10xxxxxx 10xxxxxx...
相反,如果您需要了解页面编码,则可以使用以下技巧:
function lengthInPageEncoding(s) { var a = document.createElement('A'); a.href = '#' + s; var sEnpred = a.href; sEnpred = sEnpred.substring(sEnpred.indexOf('#') + 1); var m = sEnpred.match(/%[0-9a-f]{2}/g); return sEnpred.length - (m ? m.length * 2 : 0);}


