Conversor de Punycode (nomes de domínio internacionalizados)

Converte nomes de domínio internacionalizados (IDN) que contêm caracteres não ASCII, como o japonês, para Punycode (uma codificação compatível com ASCII) e vice-versa.

Dicas de uso

  • Nomes de domínio compostos por vários rótulos (partes separadas por `.`) também são processados automaticamente rótulo por rótulo: os que contêm apenas caracteres ASCII permanecem inalterados, e somente os rótulos com caracteres não ASCII são convertidos para o formato com prefixo `xn--`.
  • No modo "Punycode → Nome de domínio", apenas os rótulos que incluem o prefixo `xn--` são decodificados; os demais são mantidos como estão.
  • A mesma lógica de conversão pode ser aplicada não só a nomes de domínio, mas também à parte após o `@` em um endereço de e-mail (a parte do domínio).
  • Ao digitar um nome de domínio internacionalizado na barra de endereços do navegador, a maioria dos navegadores o converte internamente para Punycode antes de realizar a resolução DNS.

Perguntas frequentes

Punycode (RFC 3492) é um esquema de codificação que converte nomes de domínio contendo caracteres Unicode — japonês, chinês, árabe, entre outros — conhecidos como nomes de domínio internacionalizados (IDN), em cadeias formadas apenas por caracteres ASCII, que o DNS consegue processar. O rótulo resultante recebe o prefixo `xn--`.

O DNS (Domain Name System) foi originalmente projetado partindo do princípio de que apenas caracteres ASCII seriam usados, por isso nomes de domínio com caracteres japoneses ou emojis não podem ser resolvidos como estão. O Punycode converte nomes de domínio com caracteres não ASCII em cadeias ASCII, tornando possíveis os domínios internacionalizados sem alterar a infraestrutura DNS existente.

`xn--` é conhecido como "prefixo ACE" (ASCII Compatible Encoding), e sinaliza ao DNS e a softwares compatíveis que aquele rótulo é um domínio internacionalizado codificado em Punycode. Ao detectar esse prefixo, os navegadores costumam decodificá-lo e exibir ao usuário a cadeia Unicode original.

Sim, essa é uma técnica de phishing conhecida como "ataque homógrafo de IDN". Já foram relatados casos em que um domínio Punycode (por exemplo, `xn--80ak6aa92e.com`) codificado com caracteres quase idênticos visualmente — como o "а" cirílico e o "a" latino — foi usado para se passar por um domínio legítimo. Os principais navegadores mitigam isso exibindo a forma Punycode não decodificada (a cadeia que começa com `xn--`) na barra de endereços quando detectam uma combinação suspeita de caracteres.
ツールくん

Curiosidade — os bastidores de como "gato" e "日本語" se tornaram nomes de domínio

As discussões sobre nomes de domínio internacionalizados (IDN) começaram no final da década de 1990, mas a padronização levou muito tempo. Várias abordagens foram propostas para lidar com caracteres não ASCII sem alterar o núcleo do DNS, e por fim foi adotada a abordagem Punycode — codificar e decodificar na camada de aplicação (do lado do cliente), sem modificar o próprio servidor DNS —, padronizada como RFC 3492 em 2003.

Diz-se que o nome "Punycode" vem da combinação de "Unicode" com "an amusing pun" (um trocadilho divertido), e o próprio algoritmo é uma especialização, voltada para nomes de domínio, de um método de codificação mais geral chamado Bootstring (uma técnica de propósito geral criada por pesquisadores da IBM para codificar qualquer conjunto de caracteres em um conjunto restrito). O fato de até a origem do nome "Punycode" ter um quê de piada revela bem o senso de humor típico da comunidade de desenvolvedores.

Hoje em dia, nomes de domínio em diversos idiomas e símbolos — domínios japoneses (`.jp`) e até domínios com emojis (existem exemplos reais como `💩.la`) — são de fato registrados e utilizados, mas por trás de todos eles sempre ocorre esse processo de conversão via Punycode. Até o elegante domínio japonês exibido na barra de endereços do navegador é trocado com o servidor DNS como uma simples cadeia ASCII que começa com `xn--`.