O que a ferramenta faz
Este conversor traduz nomes de domínio internacionalizados (IDNs) entre a forma que as pessoas leem e a forma que o DNS guarda. Digite pão.example e você recebe xn--po-sia.example; cole um nome xn-- e você recebe o original em Unicode. Funciona nos dois sentidos enquanto você digita, rótulo por rótulo, então em loja.pão.example só o rótulo com caracteres não ASCII ganha o prefixo xn--.
A codificação é o Punycode (RFC 3492), implementado em JavaScript dentro do seu navegador; nada do que você digita é enviado a lugar nenhum. Antes de codificar, a ferramenta passa cada rótulo para minúsculas e aplica a normalização Unicode NFC, então um ã pré-composto e um a seguido de um til combinante dão o mesmo resultado. Ela não aplica todas as regras de mapeamento do IDNA2008 ou do UTS #46, então uma conversão bem-sucedida é uma codificação correta, e não uma prova de que um registro vai aceitar o nome.
Ao lado do resultado aparece o detalhamento de cada rótulo (forma Unicode, forma ASCII e tamanho), uma verificação dos limites do DNS, de 63 octetos por rótulo e 253 para o nome completo, e um alerta quando um mesmo rótulo mistura alfabetos, como o latino com o cirílico ou o grego.
Como usar
- Digite ou cole um nome de domínio, uma URL completa ou um endereço de e-mail.
- Veja a forma convertida se atualizar: uma entrada em Unicode gera a forma
xn--, e uma entradaxn--gera Unicode. - Leia o detalhamento dos rótulos para ver tamanhos, erros de limite e eventuais alertas de alfabetos misturados.
- Copie a forma que o destino espera.
Numa URL, só o host é convertido; o resto fica como foi digitado. (Na web, caracteres não ASCII num caminho ou numa query string são codificados em porcentagem como UTF-8, e não convertidos para Punycode.) Num endereço de e-mail, só a parte depois do @ é convertida. Uma parte local como joão não tem forma em Punycode; entregar e-mail para ela exige suporte a SMTPUTF8 (RFC 6531) em todos os servidores do caminho.
Casos de uso
- Checar um link suspeito. Cole a URL de uma mensagem antes de abri-la. Se o host decodificar para letras de dois alfabetos, ou se um nome com cara de conhecido for na verdade um rótulo
xn--, olhe com mais atenção antes de clicar. - Escrever registros DNS. Arquivos de zona e a maioria dos painéis de hospedagem de DNS esperam a forma ASCII. Use exatamente essa string onde quer que um registro se refira ao nome, incluindo destinos de CNAME e hosts de MX.
- Pedir certificados TLS. Autoridades certificadoras e clientes ACME recebem a forma
xn--nos nomes alternativos (SAN). Decodificar a lista SAN de um certificado mostra quais nomes Unicode ele cobre de fato. - Ler logs. Logs de servidor web, cabeçalhos HTTP Host e valores de SNI do TLS trazem o nome codificado. Decodifique uma entrada desconhecida para conseguir lê-la.
- Configurar e-mail para um IDN. Os registros MX, SPF, DKIM e DMARC ficam todos sob o nome
xn--, e um endereço comocontato@xn--po-sia.examplefunciona com programas de e-mail comuns. - Conferir o tamanho antes de registrar. A codificação expande bastante alguns sistemas de escrita: o rótulo tailandês de sete caracteres ภาษาไทย vira
xn--o3crh0a8bb0k, com 16 octetos, então um rótulo que parece curto ainda pode passar de 63.
Os registros DNS e a solicitação de assinatura de certificado (CSR) para bücher.example usam o nome codificado como qualquer outro nome de host:
xn--bcher-kva.example. 3600 IN A 192.0.2.10
www.xn--bcher-kva.example. 3600 IN CNAME xn--bcher-kva.example.
xn--bcher-kva.example. 3600 IN MX 10 mail.xn--bcher-kva.example.
openssl req -new -key site.key -out site.csr \
-subj "/CN=xn--bcher-kva.example" \
-addext "subjectAltName=DNS:xn--bcher-kva.example,DNS:www.xn--bcher-kva.example"
Como o Punycode encaixa Unicode num nome de host
A rigor, o formato de transmissão do DNS aceita quaisquer valores de byte. Na prática, os nomes de host se limitam a letras ASCII, dígitos e hífen desde os anos 1980 (a regra LDH das RFC 952 e RFC 1123), e resolvedores, servidores de e-mail e verificações de certificado foram construídos sobre essa premissa. Em vez de mudar tudo isso, o IDNA converte os nomes dentro do aplicativo, antes de qualquer consulta ser enviada, numa string que já obedece à regra antiga.
O Punycode trabalha em duas etapas. Primeiro, copia em ordem os caracteres ASCII do rótulo e acrescenta um hífen se houver algum: pão dá po-. Depois, descreve cada caractere que falta como um único número que diz qual ponto de código inserir e onde. O ã é U+00E3, 227 em decimal. Contando a partir de 128, com duas letras já colocadas e, portanto, três posições possíveis de inserção, o número é (227 − 128) × 3 + 1 = 298, em que o 1 final significa “depois da primeira letra”. Esse número é escrito numa forma de base 36 de tamanho variável, com a–z e 0–9, usando limites que se ajustam para que números pequenos continuem curtos. O resultado é sia, o que dá xn--po-sia.
A decodificação faz o caminho inverso: tudo antes do último hífen é copiado, e os caracteres depois dele são lidos de volta como inserções. Um rótulo sem nenhuma letra ASCII, como o tailandês acima, não tem hífen separador depois do prefixo. Como é o rótulo codificado que trafega pelo DNS, o limite de 63 octetos vale para ele, e não para o texto Unicode.
Domínios imitadores e a barra de endereços
Muitas letras de alfabetos diferentes são idênticas. O а cirílico (U+0430) é igual ao a latino na maioria das fontes, então bаnco.example, com um а cirílico na segunda letra, parece uma palavra comum, mas é codificado como xn--bnco-53d.example. Isso é um ataque homógrafo.
Os navegadores decidem, rótulo por rótulo, se mostram Unicode ou a forma xn--. As políticas variam de fabricante para fabricante, mas os testes comuns incluem verificar se um rótulo mistura alfabetos em combinações que nomes reais raramente usam, se é escrito só com letras que imitam as latinas e se é muito parecido com um domínio conhecido. No Firefox, definir network.IDN_show_punycode como true em about:config força a forma ASCII para todos os nomes.
O alerta de alfabetos misturados desta página procura mais de um alfabeto dentro de um mesmo rótulo. Um rótulo escrito todo com letras cirílicas parecidas com as latinas não é misto, então um resultado limpo não prova que um nome é legítimo. Compare o nome decodificado com o endereço que você esperava e, na dúvida, digite o endereço você mesmo.
Perguntas frequentes
Por que meu navegador mostra xn-- em vez do nome de verdade?
Os navegadores só exibem Unicode quando um rótulo passa pela política de exibição deles. Se o rótulo mistura alfabetos de um jeito incomum, é escrito só com caracteres que imitam letras latinas ou se parece demais com um domínio conhecido, o navegador mostra a forma codificada. O site carrega normalmente; cole o nome aqui para ver o que o rótulo xn-- significa depois de decodificado.
Domínio que começa com xn-- é perigoso?
Não. O prefixo só significa que o rótulo foi codificado a partir de Unicode, e muitos sites legítimos em alemão, chinês, árabe, russo e outras línguas o usam. O que importa é o texto decodificado. Se ele forma o nome que você esperava, num único alfabeto, não há nada de estranho. Se ele imita um nome conhecido com letras emprestadas de outro alfabeto, trate o link com cuidado.
Por que outro conversor dá um resultado diferente para um nome com ß?
O processamento antigo do IDNA2003, e o modo de transição do UTS #46, trocam ß por ss e o sigma final ς por σ antes de codificar, então straße vira simplesmente strasse. O IDNA2008 mantém esses caracteres como estão. A conversão para minúsculas e a normalização NFC, as etapas que esta ferramenta aplica, deixam o ß intacto, então faß é codificado aqui como xn--fa-hia. Confira qual forma o seu registro e os programas dos seus usuários esperam.
Posso colocar Unicode direto num arquivo de zona ou num certificado?
Use a forma xn-- nos dois. Um certificado guarda nomes DNS num campo que só aceita ASCII, então as autoridades certificadoras esperam a forma codificada na lista de nomes alternativos (SAN). Num arquivo de zona, um nome escrito com bytes UTF-8 crus não corresponderia às consultas xn-- que resolvedores e navegadores enviam, então o registro simplesmente nunca seria encontrado.
E a parte antes do @ num e-mail, como fica?
Fica exatamente como você digitou, porque o Punycode só se aplica a nomes de domínio. Se a parte local tiver caracteres fora do ASCII, como em joão, a entrega depende da extensão SMTPUTF8, definida na RFC 6531. Todos os servidores do caminho precisam suportá-la; não existe uma alternativa em ASCII parecida com o Punycode, então uma mensagem para esse tipo de endereço normalmente volta onde não há suporte.
Por que um registro pode recusar um nome que esta ferramenta converte sem reclamar?
A ferramenta faz uma codificação correta segundo a RFC 3492, depois de passar o nome para minúsculas e aplicar a normalização NFC, mas não implementa todas as regras do IDNA2008 ou do UTS #46. O IDNA2008 proíbe a maioria dos símbolos e tem regras de contexto para caracteres como os de junção, e cada registro publica a própria tabela de caracteres permitidos para o seu domínio de topo. Um nome pode ser codificado sem problema aqui e ainda assim ser barrado nessas verificações.
O que eu digito é enviado para algum servidor?
Não. A conversão, a verificação de tamanho e o alerta de alfabetos misturados rodam em JavaScript dentro do seu navegador, então os nomes, URLs e endereços de e-mail que você cola nunca saem do seu dispositivo. Além disso, o iseeu.cc não guarda registros de endereços IP nem de consultas, não tem banco de dados de visitantes, não usa cookies e não exibe anúncios.
Uma conversão limpa mostra que o nome está codificado corretamente, não que ele pode ser registrado ou que é seguro. Os registros aplicam as próprias regras de caracteres, e nomes imitadores podem evitar a mistura de alfabetos.