Lunghezza testo

Misura una stringa in diversi modi utili contemporaneamente, inclusi emoji ed ebraico.

Input
Caratteri
0
Punti di codice
0
Unità UTF-16
0
Parole
0
Righe
0

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.