Langsung ke konten

Hitung karakter

Dengan spasi dan tanpa spasi, plus jumlah byte yang sebenarnya diukur oleh database dan gateway SMS Anda. Emoji dihitung sebagai satu karakter di sini, karena memang begitulah adanya.

  • Tidak pernah disimpan
  • Tanpa antre, tanpa menunggu
  • Tanpa daftar, tanpa watermark

0

Karakter

yang dilihat orang

0

Tanpa spasi

spasi tidak dihitung

0

Kata

bahasa apa pun

0

Byte UTF-8

yang dihitung database

Semua hitungan, dan apa yang memakainya
BarisSeperti penomoran di editor
0
KalimatTidak terpotong oleh “dr.” atau “dll.”
0
ParagrafBlok yang dipisahkan baris kosong
0
Code pointYang dicocokkan oleh “.” dalam regular expression
0
Unit UTF-16Yang dilaporkan string.length di JavaScript
0
Byte UTF-8Yang diukur batas VARCHAR dan header HTTP
0
Waktu bacaDalam hati, 238 kata per menit
—
Waktu bicaraDengan suara, 150 kata per menit
—
Kata terpanjangMenurut karakter, bukan byte
—
Rata-rata kataGambaran kasar keterbacaan
—

Mulailah mengetik dan semuanya akan terisi. Coba emoji, atau satu kalimat bahasa Mandarin — keduanya dihitung seperti cara orang menghitung, hal yang sering salah di kebanyakan penghitung.

Cara kerjanya

1

Tempel atau ketik

Hitungan diperbarui saat Anda mengetik. Tidak ada yang disimpan.

2

Pilih hitungan yang Anda perlukan

Karakter, karakter tanpa spasi, code point, atau byte UTF-8 — masing-masing ditampilkan, beserta apa yang memakainya.

3

Pantau batas Anda

Judul SEO, meta description, segmen SMS, dan field 255 byte semuanya dipantau terhadap apa yang sudah Anda tulis.

Empat angka, karena “karakter” punya empat arti

Ambil contoh emoji keluarga, atau jempol dengan warna kulit. Manusia melihat satu karakter. Emoji itu dibangun dari beberapa code point yang disambung penghubung tak terlihat, jadi regular expression melihat tujuh. JavaScript menyimpan teks dalam unit 16-bit dan apa pun di luar rentang dasar memakan dua unit, jadi hasilnya sebelas. Jika di-encode sebagai UTF-8 untuk kolom database, emoji itu menempati dua puluh lima byte. Tidak ada angka yang salah dan tidak ada yang merupakan jawaban tunggal — angka yang tepat sepenuhnya bergantung pada apa yang membatasi.

Jadi pertanyaan praktisnya adalah siapa yang menetapkan batas. Kolom database yang dideklarasikan sebagai VARCHAR menghitung byte di sebagian besar engine, itulah sebabnya field yang menerima 255 karakter bahasa Inggris menolak karakter Jepang yang jauh lebih sedikit. SMS berisi 160 karakter dalam alfabet tujuh bit miliknya sendiri, dan turun menjadi 70 per pesan begitu satu karakter berada di luar alfabet itu — satu tanda kutip melengkung atau emoji bisa mengubah satu pesan menjadi tiga. Validator formulir di JavaScript hampir selalu menghitung unit UTF-16, itulah sebabnya field yang menyebut 280 karakter bisa menolak teks penuh emoji yang tampak lebih pendek.

Hitungan atas apa yang dilihat pembaca adalah yang paling sulit, dan dilakukan dengan segmentasi teks milik browser sendiri — mesin yang sama yang menentukan ke mana kursor berpindah saat Anda menekan tombol panah kiri. Itulah definisi “satu karakter” yang tepat untuk apa pun yang dilihat manusia, dan definisi ini menangani kasus yang menjebak penghitungan sederhana: huruf beraksen yang ditulis sebagai huruf dasar plus tanda gabungan dihitung satu, dan gugus aksara Hindi serta Thai dihitung sebagaimana pembaca aksara itu menghitungnya.

Untuk tulisan bahasa Inggris biasa, keempat angka itu identik, itulah sebabnya masalahnya tidak terlihat sampai suatu saat muncul. Keempatnya berbeda pada emoji, pada karakter beraksen dan gabungan, pada aksara non-Latin, dan pada simbol matematika — dan justru input-input itulah yang membuat sebuah field terpotong diam-diam di database tiga bulan setelah dibangun.

Jika Anda butuh hal lain

Di dalam kode, gunakan fungsi yang menghitung apa yang Anda perlukan, bukan panjang bawaan. Intl.Segmenter di JavaScript menghitung apa yang dilihat pembaca; string di Python 3 menghitung code point dan len(s.encode("utf-8")) menghitung byte; PHP punya mb_strlen dan strlen justru untuk perbedaan ini. Bawaan di sebagian besar bahasa adalah yang dianggap praktis oleh bahasa itu, dan jarang sama dengan yang dimaksud batas Anda.

Jika field database yang menjadi batasannya, perbaikan yang tahan lama ada di hulu. Mendeklarasikan kolom sebagai utf8mb4 di MySQL, atau text di PostgreSQL, menghilangkan satu golongan penuh bug pemotongan — utf8 lama di MySQL terkenal hanya tiga byte per karakter dan sama sekali tidak bisa menyimpan emoji. Menghitung dengan cermat di formulir hanyalah solusi sementara untuk kolom yang seharusnya dideklarasikan secara berbeda.

Pertanyaan yang sering diajukan

Apakah teks saya disimpan di suatu tempat?

Tidak. Tidak ada yang disimpan dan tidak ada permintaan yang dikirim, dan alat ini tetap berfungsi saat jaringan terputus. Untuk teks, hal ini lebih penting daripada kelihatannya: yang ditempel orang ke penghitung online adalah tulisan yang belum terbit, draf hukum, tugas siswa, dan dokumen internal.

Mengapa ada empat hitungan karakter yang berbeda?

Karena “karakter” punya empat arti yang berbeda dan kebanyakan alat hanya mengenal satu. Yang ANDA lihat sebagai satu karakter adalah grapheme cluster — “é”, “🎉”, bahkan “👨‍👩‍👧‍👦” masing-masing dihitung satu. Yang dilaporkan string.length di JavaScript adalah code unit UTF-16, di mana emoji keluarga itu bernilai 11. Yang dicocokkan regular expression adalah code point, di mana nilainya 7. Dan yang diukur kolom database atau header HTTP adalah BYTE UTF-8, di mana nilainya 25. Keempatnya ditampilkan di sini, karena yang Anda perlukan bergantung pada siapa yang membatasi.

Berapa karakter sebuah emoji?

Satu, di sini — karena begitulah emoji bagi orang yang membacanya, dan itulah yang dihitung batas karakter di platform modern. Di tempat lain bisa 2, 7, atau 11: “👨‍👩‍👧‍👦” adalah empat orang yang disambung tiga karakter penghubung tak terlihat, jadi nilainya 7 code point dan 11 unit yang dihitung string.length di JavaScript. Jika sebuah formulir menolak teks Anda karena terlalu panjang padahal kelihatannya cukup pendek, biasanya inilah penyebabnya, dan jumlah byte di halaman ini akan menunjukkan ukuran sebenarnya.

Mengapa teks 200 karakter saya gagal masuk ke field database 255 karakter?

Karena field itu hampir pasti membatasi BYTE, bukan karakter. Dalam UTF-8, huruf Inggris biasa memakan satu byte per huruf, tetapi huruf beraksen memakan dua, dan huruf Mandarin, Jepang, Arab, serta emoji memakan tiga atau empat. Jadi 200 karakter bahasa Jepang berarti 600 byte. Jumlah byte ditampilkan di sini justru karena alasan ini — itulah angka yang sebenarnya diperiksa database Anda.

Mengapa satu emoji memangkas batas SMS saya dari 160 menjadi 70?

Karena SMS memakai alfabet 7-bit yang ringkas dan menampung 160 karakter — dan alfabet itu tidak punya emoji, tanda kutip melengkung, dan hampir tidak punya aksen. Satu karakter di luarnya mengalihkan SELURUH pesan ke Unicode, dan batasnya turun menjadi 70. Apostrof melengkung yang ditempel dari Word bisa menyebabkannya semudah emoji. Begitulah pesan pendek bisa ditagih sebagai tiga pesan, dan halaman ini memberi tahu Anda saat hal itu terjadi.

Apakah spasi ikut dihitung?

Kedua angka ditampilkan sekaligus, jadi Anda tidak perlu memilih. Jeda baris dan tab juga dihitung sebagai spasi.

Perlu diketahui: Empat angka, karena “karakter” punya empat arti dan yang Anda perlukan bergantung pada siapa yang membatasi. VARCHAR di database menghitung byte UTF-8, regular expression menghitung code point, JavaScript menghitung unit UTF-16, dan manusia menghitung apa yang terlihat. Keempatnya paling sering berbeda pada emoji.

Pasang alat ini di situs Anda

Gratis untuk blog, halaman kelas, atau artikel bantuan apa pun. Tempel satu potong kode dan pengunjung Anda bisa langsung memakainya di halaman Anda.