Lunghezza testo
Misura una stringa in diversi modi utili contemporaneamente, inclusi emoji ed ebraico.
Perché "quanto è lungo questo testo?" ha più di una risposta
Sembra una domanda banale, ma la lunghezza di un testo dipende del tutto da cosa stai contando. Una persona conta i caratteri che vede. Un database conta lo spazio di archiviazione che un valore occupa. JavaScript conta qualcosa di diverso. Quando questi numeri non coincidono — e spesso non lo fanno con emoji, lettere accentate e scritture non latine — una singola "lunghezza" è fuorviante. Questo strumento mostra cinque misure significative affiancate, così scegli quella che conta nel tuo caso.
Le cinque metriche spiegate
- Caratteri (grafemi): ciò che un essere umano percepisce come un carattere. Un emoji di famiglia come 👨👩👧, o una lettera con un accento combinante, conta come uno: è il conteggio che corrisponde "a occhio".
- Punti di codice (code points): il numero di valori scalari Unicode. Un singolo carattere visibile può essere formato da più punti di codice uniti, quindi questo numero è spesso maggiore di quello dei grafemi.
- Unità UTF-16: il valore che JavaScript riporta dalla proprietà .length di una stringa. I caratteri fuori dal Piano multilingue di base (la maggior parte degli emoji) occupano due unità UTF-16 ciascuno.
- Parole: il numero di token di tipo parola, rilevati in modo compatibile con Unicode invece di dividere ingenuamente sugli spazi.
- Righe: il numero di righe, contando ogni interruzione di riga.
Perché emoji e accenti rompono il conteggio ingenuo
Il testo moderno è costruito con Unicode, che rappresenta molti caratteri visibili come sequenze anziché come unità singole. Un emoji di bandiera è composto da due simboli indicatori regionali. Un emoji di famiglia è composto da più figure unite da caratteri invisibili di "giunzione a larghezza zero". Una é accentata può essere un singolo punto di codice, o una e semplice seguita da un accento combinante. Ognuno sembra un carattere ma può contare come due, tre o più a seconda della metrica. È proprio per questo che contare a mano, o fidarsi di un solo numero, porta a bug.
Quale conteggio dovresti usare?
- Limiti di caratteri che le persone vedono (una bio, un campo in stile tweet, un’anteprima SMS): usa Caratteri (grafemi), perché corrisponde a ciò che conta l’utente.
- Gestione di stringhe in JavaScript, indicizzazione o slicing: usa le unità UTF-16, poiché è su di esse che si basano .length e gli indici di stringa.
- Dimensioni delle colonne di database: verifica se la tua colonna è misurata in caratteri o in byte — molte sono limitate in byte, e i byte UTF-8 differiscono di nuovo da tutti questi conteggi.
- Conteggi di parole o righe per editor e leggibilità: usa le metriche Parole e Righe.
Domande frequenti
- Quale conteggio corrisponde alla lunghezza di stringa di JavaScript?
- Il valore delle unità UTF-16 corrisponde alla proprietà .length grezza di JavaScript. Se il tuo codice affetta o indicizza stringhe, è questo il numero che ne governa il comportamento.
- Perché un emoji conta come più caratteri?
- Molti emoji sono composti da più punti di codice Unicode uniti. Come grafema (ciò che vedi) è un carattere, ma i suoi conteggi di punti di codice e UTF-16 sono più alti, ed è per questo che ogni misura è mostrata separatamente.
- Conta gli spazi e i ritorni a capo finali?
- Sì. Ogni carattere che incolli viene contato, inclusi gli spazi iniziali e finali e le interruzioni di riga. Se i totali sembrano più alti del previsto, controlla la presenza di spazi finali invisibili.
- Il mio testo viene inviato da qualche parte?
- No. Tutto il conteggio avviene nel tuo browser. Il testo che digiti o incolli non lascia mai il tuo dispositivo.
- Cos’è un grafema?
- Un grafema, o "cluster di grafemi", è un carattere così come lo percepisce l’utente: la più piccola unità che un lettore chiamerebbe un singolo carattere, anche se formata da più punti di codice.
- In cosa differiscono i byte da questi conteggi?
- I byte dipendono dalla codifica. In UTF-8, una lettera ASCII è un byte, la maggior parte dei caratteri accentati e non latini sono due o tre, e molti emoji sono quattro. Nessuna delle cinque metriche qui è un conteggio di byte, quindi per i campi limitati in byte codifica prima in UTF-8.