Tidak ada cara untuk melakukannya di JavaScript secara native. (Lihat jawaban Riccardo Galli untuk pendekatan modern.)
Untuk referensi historis atau di mana API TextEncoder masih tidak tersedia .
Jika Anda mengetahui pengkodean karakter, Anda dapat menghitungnya sendiri.
encodeURIComponent
mengasumsikan UTF-8 sebagai pengkodean karakter, jadi jika Anda membutuhkan pengkodean itu, Anda dapat melakukannya,
function lengthInUtf8Bytes(str) {
// Matches only the 10.. bytes that are non-initial characters in a multi-byte sequence.
var m = encodeURIComponent(str).match(/%[89ABab]/g);
return str.length + (m ? m.length : 0);
}
Ini seharusnya berfungsi karena cara UTF-8 mengkodekan urutan multi-byte. Byte pertama yang dikodekan selalu dimulai dengan bit nol tinggi untuk urutan byte tunggal, atau byte yang digit hex pertamanya adalah C, D, E, atau F. Byte kedua dan selanjutnya adalah byte yang dua bit pertamanya adalah 10 Itu adalah byte ekstra yang ingin Anda hitung dalam UTF-8.
Tabel di wikipedia membuatnya lebih jelas
Bits Last code point Byte 1 Byte 2 Byte 3
7 U+007F 0xxxxxxx
11 U+07FF 110xxxxx 10xxxxxx
16 U+FFFF 1110xxxx 10xxxxxx 10xxxxxx
...
Jika Anda perlu memahami pengkodean halaman, Anda dapat menggunakan trik ini:
function lengthInPageEncoding(s) {
var a = document.createElement('A');
a.href = '#' + s;
var sEncoded = a.href;
sEncoded = sEncoded.substring(sEncoded.indexOf('#') + 1);
var m = sEncoded.match(/%[0-9a-f]{2}/g);
return sEncoded.length - (m ? m.length * 2 : 0);
}