Panjang string

Ukur sebuah string dalam beberapa cara bermakna sekaligus, termasuk emoji dan aksara Ibrani.

Masukan
Karakter
0
Titik kode
0
Unit UTF-16
0
Kata
0
Baris
0

Mengapa "seberapa panjang string ini?" punya lebih dari satu jawaban

Kedengarannya pertanyaan sepele, tetapi panjang sepotong teks bergantung sepenuhnya pada apa yang Anda hitung. Seseorang menghitung karakter yang bisa dilihatnya. Sebuah basis data menghitung penyimpanan yang ditempati sebuah nilai. JavaScript menghitung sesuatu yang berbeda lagi. Ketika angka-angka ini tak sepakat — dan sering demikian untuk emoji, huruf beraksen, dan aksara non-Latin — satu "panjang" menjadi menyesatkan. Alat ini menampilkan lima ukuran bermakna berdampingan sehingga Anda bisa memilih yang penting untuk situasi Anda.

Kelima metrik dijelaskan

  • Karakter (grafem): apa yang dirasakan manusia sebagai satu karakter. Sebuah emoji keluarga seperti 👨‍👩‍👧, atau huruf dengan aksen gabungan, dihitung satu — inilah hitungan yang cocok dengan "secara kasat mata".
  • Titik kode: jumlah nilai skalar Unicode. Satu karakter yang terlihat bisa dibangun dari beberapa titik kode yang digabung, jadi angka ini sering lebih tinggi daripada hitungan grafem.
  • Unit UTF-16: nilai yang dilaporkan JavaScript dari properti .length sebuah string. Karakter di luar Basic Multilingual Plane (kebanyakan emoji) menempati dua unit UTF-16 masing-masing.
  • Kata: jumlah token serupa-kata, dideteksi dengan cara yang sadar Unicode ketimbang memecah spasi secara naif.
  • Baris: jumlah baris, menghitung setiap pemutus baris.

Mengapa emoji dan aksen merusak penghitungan naif

Teks modern dibangun dari Unicode, yang merepresentasikan banyak karakter terlihat sebagai urutan ketimbang unit tunggal. Sebuah emoji bendera adalah dua simbol penanda-wilayah. Sebuah emoji keluarga adalah beberapa orang yang digabung oleh karakter "penggabung lebar-nol" yang tak terlihat. Sebuah é beraksen bisa berupa satu titik kode atau e polos diikuti aksen gabungan. Masing-masing tampak seperti satu karakter tetapi bisa dihitung dua, tiga, atau lebih bergantung pada metriknya. Persis itulah sebabnya menghitung dengan tangan, atau memercayai satu angka, menyebabkan bug.

Hitungan mana yang sebaiknya Anda pakai?

  • Batas karakter yang dilihat orang (sebuah bio, bidang bergaya-tweet, pratinjau SMS): pakai Karakter (grafem), karena itu cocok dengan yang dihitung pengguna.
  • Penanganan string JavaScript, pengindeksan larik, atau pemotongan: pakai unit UTF-16, karena itulah yang menjadi dasar .length dan indeks string.
  • Ukuran kolom basis data: periksa apakah kolom Anda diukur dalam karakter atau bita — banyak yang dibatasi bita, dan bita UTF-8 berbeda lagi dari semua hitungan ini.
  • Hitungan kata atau baris untuk penyunting dan keterbacaan: pakai metrik Kata dan Baris.

Pertanyaan yang sering diajukan

Hitungan mana yang cocok dengan panjang string JavaScript?
Nilai unit UTF-16 cocok dengan properti .length mentah di JavaScript. Jika kode Anda memotong atau mengindeks string, inilah angka yang mengatur perilakunya.
Mengapa satu emoji dihitung sebagai beberapa karakter?
Banyak emoji tersusun dari beberapa titik kode Unicode yang digabung. Sebagai grafem (yang Anda lihat) ia satu karakter, tetapi hitungan titik kode dan UTF-16-nya lebih tinggi, itulah sebabnya tiap ukuran ditampilkan terpisah.
Apakah ia menghitung spasi dan baris-baru di ujung?
Ya. Setiap karakter yang Anda tempel dihitung, termasuk spasi di awal dan ujung serta pemutus baris. Jika total Anda tampak lebih tinggi dari yang diharapkan, periksa spasi tak terlihat di ujung.
Apakah teks saya dikirim ke mana pun?
Tidak. Semua penghitungan terjadi di browser Anda. Teks yang Anda ketik atau tempel tidak pernah meninggalkan perangkat Anda.
Apa itu grafem?
Sebuah grafem, atau "gugus grafem", adalah karakter sebagaimana dirasakan pengguna — unit terkecil yang akan disebut seorang pembaca sebagai satu karakter, meski ia dibangun dari beberapa titik kode yang mendasarinya.
Bagaimana bita berbeda dari hitungan-hitungan ini?
Bita bergantung pada pengodean. Dalam UTF-8, sebuah huruf ASCII adalah satu bita, kebanyakan karakter beraksen dan non-Latin dua atau tiga, dan banyak emoji empat. Tak satu pun dari kelima metrik di sini adalah hitungan bita, jadi untuk bidang yang dibatasi bita Anda sebaiknya mengodekan ke UTF-8 dulu.