Menghitung string yang sama dengan empat cara

Moyoutil menghitung termasuk spasi dengan [...s].length, yang menghitung titik kode. s.length JavaScript menghitung unit UTF-16. Urutan memiliki empat titik kode orang dan tiga penghubung U+200D: total tujuh. Panjang UTF-16 adalah 11 dan TextEncoder menghasilkan 25 byte UTF-8.

const s = "👨‍👩‍👧‍👦";
[...s].length // 7
s.length // 11
new TextEncoder().encode(s).length // 25
Perbandingan satu grafem, tujuh titik kode, sebelas unit UTF-16, dan dua puluh lima byte UTF-8
Diagram hasil perhitungan yang dijalankan. Satuan berbeda; luas kotak tidak menggambarkan rasio angka. Diagram menunjukkan cara menghitung, bukan gambar emoji.

ECMAScript: String iterator · WHATWG: TextEncoder

Batas teks dan batas masukan

Unicode UAX #29 menjelaskan batas grafem diperluas dan aturan yang tidak memisahkan urutan emoji ZWJ. Intl.Segmenter dengan grapheme menghasilkan satu segmen untuk contoh ini. Batas grafem tidak menjamin tampilan atau aturan jumlah karakter semua formulir.

const segmenter = new Intl.Segmenter("en", {
  granularity: "grapheme"
});
[...segmenter.segment(s)].length // 1

Unicode UAX #29: Grapheme Cluster Boundaries

Moyoutil tidak menyediakan jumlah grafem atau UTF-16 terpisah. Tempel urutan di penghitung karakter dan byte: 7 termasuk spasi, 7 tanpa spasi, dan 25 byte UTF-8. Periksa apakah batas berarti karakter, byte, atau UTF-16 lalu verifikasi di formulir tujuan. Menghapus penghubung mengubah urutan asli.

Pertanyaan yang Sering Diajukan

Apakah semua emoji dihitung sebagai tujuh karakter?

Tidak. Hasil ini khusus untuk urutan keluarga tersebut. Titik kode berbeda menghasilkan jumlah berbeda. String kosong memiliki nol titik kode, unit UTF-16, byte UTF-8, dan grafem.