Inspetor de caracteres Unicode
Veja code points, bytes UTF-8/UTF-16 e escapes de cada caractere
Sobre esta ferramenta
Cole qualquer texto e veja cada caractere dissecado: seu ponto de código (U+XXXX), bytes UTF-8, unidades UTF-16, sequência de escape JavaScript, entidade HTML e categoria geral — além dos totais de pontos de código, unidades UTF-16, bytes UTF-8 e caracteres percebidos pelo usuário (grafemas).
Esta é a ferramenta para os momentos de "por que essa string está estranha?": caracteres invisÃveis (espaços de largura zero, BOMs, marcas direcionais) aparecem como linhas visÃveis; caracteres parecidos (а cirÃlico vs a latino) revelam pontos de código diferentes; e um emoji que "é um caractere" acaba sendo sete pontos de código unidos por zero-width joiners.
Os quatro totais diferentes de comprimento respondem à eterna pergunta de por que o .length do JavaScript, um limite de bytes de banco de dados e o que o usuário vê discordam sobre o tamanho de uma string.
Perguntas frequentes
- Por que "🎉".length === 2 em JavaScript?
- Strings JavaScript contam unidades de código UTF-16. Caracteres além de U+FFFF — incluindo a maioria dos emoji — precisam de um par substituto, duas unidades. O inspetor mostra as duas unidades e o ponto de código real, e o resumo os conta separadamente.
- O que é um grafema (grapheme cluster)?
- O que um leitor percebe como um caractere. é pode ser dois pontos de código (e + acento combinante), e emoji de famÃlia podem ser sete ou mais unidos por zero-width joiners. A contagem de grafemas usa o Intl.Segmenter do navegador — o mais próximo que existe de "caracteres como os usuários os veem".
- Como encontro caracteres invisÃveis em uma string?
- Cole-a aqui — cada ponto de código ganha uma linha, incluindo espaços de largura zero (U+200B), espaços inseparáveis (U+00A0), BOMs (U+FEFF) e marcas direcionais, cada um rotulado por categoria. Esses são os culpados clássicos por trás de strings "idênticas" que falham em comparações de igualdade.
- O que as sequências de bytes UTF-8 me dizem?
- Exatamente o que será armazenado ou transmitido: ASCII é um byte, a maioria das extensões latinas dois, CJK três, emoji quatro. Se um sistema truncar no meio de uma sequência você recebe caracteres de substituição (�) — a visão de bytes mostra onde esses cortes cairiam.