Inspetor Unicode
Vê cada carácter de um texto com o seu código e nome, e encontra caracteres ocultos ou parecidos.
A carregar Inspetor Unicode… Se nada acontecer, ativa o JavaScript.
Um texto que parece idêntico no ecrã pode ser muito diferente por baixo. Uma palavra copiada de um PDF pode trazer um hífen condicional, um nome de utilizador pode esconder um espaço de largura zero, um link pode trocar o a latino pelo а cirílico, e uma letra acentuada pode estar guardada como um só carácter ou como letra base mais um acento combinatório. O Inspetor Unicode divide qualquer texto nos caracteres que o leitor vê (agrupamentos de grafemas) e lista cada ponto de código dentro deles com o número U+, o nome oficial Unicode, a categoria geral e o bloco, para veres exatamente com o que estás a lidar.
Exemplos
é (one code point)
U+00E9 LATIN SMALL LETTER E WITH ACUTE
Forma NFC, 2 bytes em UTF-8.
é (two code points)
U+0065 + U+0301 COMBINING ACUTE ACCENT
Forma NFD: parece idêntico, mas a comparação dá diferente.
pаypal (with Cyrillic а)
U+0430 CYRILLIC SMALL LETTER A
Assinalado como palavra com mistura de escritas.
Perguntas frequentes
Como encontro um espaço de largura zero no meu texto?
Qual é a diferença entre carácter, ponto de código e byte?
Porque é que duas cadeias que parecem iguais não coincidem?
O que são NFC, NFD, NFKC e NFKD?
O que é um ataque de homóglifos ou de mistura de escritas?
O que são caracteres de controlo bidirecional e porque são assinalados?
O meu texto é enviado para algum lado?
De onde vêm os nomes dos caracteres?
Sobre Inspetor Unicode
A ferramenta assinala os caracteres que costumam dar problemas. Caracteres de formatação invisíveis como o espaço de largura zero, o zero-width joiner, o word joiner e a marca de ordem de bytes (BOM); controlos bidirecionais como RLO e LRI, que podem reordenar visualmente o texto e estiveram na base do ataque "Trojan Source" a código-fonte; espaços inseparáveis, finos e outros espaços invulgares que não correspondem a um espaço normal em código ou em pesquisas; letras com aspeto de espaço em branco usadas para simular nomes vazios; e palavras que misturam letras latinas com cirílicas ou gregas, o truque clássico dos homóglifos por trás de domínios de phishing. As sequências de emoji são reconhecidas, por isso os joiners dentro de 👩🏽💻 não são tratados como suspeitos.
Clica em qualquer linha para ver todas as representações desse ponto de código: bytes UTF-8, unidades UTF-16, entidades HTML numéricas e com nome, escapes de JavaScript, CSS e Python e a forma codificada para URL. Os contadores acima da tabela mostram o número de grafemas, pontos de código, unidades UTF-16 (o que o length de JavaScript devolve) e bytes UTF-8, o que explica porque é que uma coluna de base de dados, um SMS ou um tweet contam o teu texto de forma diferente daquilo que vês.
O painel de normalização compara as quatro formas de normalização Unicode (NFC, NFD, NFKC, NFKD) e permite copiar ou inspecionar qualquer uma delas, que é como se corrigem cadeias que parecem iguais mas falham numa comparação. Por fim, o painel de limpeza remove caracteres invisíveis e bidirecionais, troca espaços exóticos por um espaço normal, elimina caracteres de controlo perdidos e normaliza o resultado se quiseres, deixando os emoji intactos. Os nomes e blocos dos caracteres vêm da Unicode Character Database oficial, e tudo corre localmente no teu navegador.
O UTF-8 foi desenhado numa toalha de papel de um restaurante
Em setembro de 1992, Ken Thompson e Rob Pike, dos Bell Labs, não estavam satisfeitos com a codificação multibyte proposta para o novo conjunto universal de caracteres. Ao jantar, num restaurante de Nova Jérsia, Thompson esboçou um esquema melhor numa toalha de papel: o ASCII continua a ocupar um byte, nenhum byte de uma sequência multibyte pode ser confundido com um carácter ASCII, e é sempre possível encontrar o início de um carácter olhando para os bits mais altos. Implementaram-no no sistema operativo Plan 9 em poucos dias.
Esse desenho é o UTF-8, e a compatibilidade com o ASCII é a razão pela qual dominou a web, onde a grande maioria das páginas o usa hoje. O próprio Unicode tinha começado alguns anos antes, com a proposta de Joe Becker de 1988 para um conjunto de caracteres "Unicode" e a primeira versão da norma publicada em 1991.
A flexibilidade que tornou o Unicode universal também criou novos problemas de segurança. Em 2017, um investigador registou um domínio escrito só com letras cirílicas que os navegadores mostravam como apple.com, o que levou os navegadores a apresentar esses nomes na forma punycode. Em 2021, o artigo Trojan Source da Universidade de Cambridge mostrou que os caracteres de controlo bidirecional podiam fazer o código-fonte aparecer de forma diferente daquela que o compilador lê.