Comprimento de texto
Mede uma cadeia de várias formas úteis ao mesmo tempo, incluindo emojis e hebraico.
Por que "qual é o comprimento deste texto?" tem mais de uma resposta
Parece uma pergunta trivial, mas o comprimento de um texto depende inteiramente do que você está contando. Uma pessoa conta os caracteres que vê. Um banco de dados conta o armazenamento que um valor ocupa. O JavaScript conta algo diferente. Quando esses números não coincidem — e muitas vezes não coincidem com emojis, letras acentuadas e escritas não latinas — um único "comprimento" engana. Esta ferramenta mostra cinco medidas significativas lado a lado para que você escolha a que importa no seu caso.
As cinco métricas explicadas
- Caracteres (grafemas): o que um humano percebe como um caractere. Um emoji de família como 👨👩👧, ou uma letra com um acento combinante, conta como um — é a contagem que corresponde "a olho".
- Pontos de código (code points): o número de valores escalares Unicode. Um único caractere visível pode ser formado por vários pontos de código unidos, então esse número costuma ser maior que o de grafemas.
- Unidades UTF-16: o valor que o JavaScript reporta pela propriedade .length de uma string. Os caracteres fora do Plano Multilíngue Básico (a maioria dos emojis) ocupam duas unidades UTF-16 cada.
- Palavras: o número de tokens do tipo palavra, detectados de forma compatível com Unicode em vez de dividir ingenuamente por espaços.
- Linhas: o número de linhas, contando cada quebra de linha.
Por que emojis e acentos quebram a contagem ingênua
O texto moderno é construído com Unicode, que representa muitos caracteres visíveis como sequências em vez de unidades individuais. Um emoji de bandeira são dois símbolos indicadores regionais. Um emoji de família são várias figuras unidas por caracteres invisíveis de "junção de largura zero". Um é acentuado pode ser um único ponto de código, ou um e simples seguido de um acento combinante. Cada um parece um caractere, mas pode contar como dois, três ou mais dependendo da métrica. É exatamente por isso que contar à mão, ou confiar num único número, leva a bugs.
Qual contagem você deve usar?
- Limites de caracteres que as pessoas veem (uma bio, um campo estilo tweet, uma prévia de SMS): use Caracteres (grafemas), porque corresponde ao que o usuário conta.
- Manipulação de strings em JavaScript, indexação ou fatiamento: use unidades UTF-16, já que é nelas que .length e os índices de string se baseiam.
- Tamanhos de colunas de banco de dados: verifique se sua coluna é medida em caracteres ou em bytes — muitas são limitadas por bytes, e os bytes UTF-8 diferem de novo de todas essas contagens.
- Contagens de palavras ou linhas para editores e legibilidade: use as métricas Palavras e Linhas.
Perguntas frequentes
- Qual contagem corresponde ao comprimento de string do JavaScript?
- O valor de unidades UTF-16 corresponde à propriedade .length bruta do JavaScript. Se o seu código fatia ou indexa strings, é esse número que rege o comportamento dele.
- Por que um emoji conta como vários caracteres?
- Muitos emojis são compostos por vários pontos de código Unicode unidos. Como grafema (o que você vê) é um caractere, mas suas contagens de ponto de código e UTF-16 são maiores, e é por isso que cada medida é mostrada separadamente.
- Ele conta espaços e quebras de linha finais?
- Sim. Cada caractere que você cola é contado, incluindo espaços iniciais e finais e quebras de linha. Se os totais parecerem maiores do que o esperado, verifique se há espaços finais invisíveis.
- Meu texto é enviado para algum lugar?
- Não. Toda a contagem acontece no seu navegador. O texto que você digita ou cola nunca sai do seu dispositivo.
- O que é um grafema?
- Um grafema, ou "cluster de grafemas", é um caractere tal como o usuário o percebe: a menor unidade que um leitor chamaria de um único caractere, mesmo que seja formada por vários pontos de código.
- Como os bytes diferem dessas contagens?
- Os bytes dependem da codificação. Em UTF-8, uma letra ASCII é um byte, a maioria dos caracteres acentuados e não latinos são dois ou três, e muitos emojis são quatro. Nenhuma das cinco métricas aqui é uma contagem de bytes, então para campos limitados por bytes codifique primeiro em UTF-8.