Punycode

Fundamentos de Domínio
Um sistema de codificação que converte nomes de domínio Unicode em formato compatível com ASCII, permitindo que nomes de domínio internacionalizados funcionem com DNS.
← Voltar ao Glossário

O que é Punycode?

Punycode é uma sintaxe de codificação definida na RFC 3492 que transforma strings Unicode no conjunto limitado de caracteres ASCII suportado por DNS. É a base técnica que torna Nomes de Domínio Internacionalizados (IDNs) possíveis, permitindo nomes de domínio em qualquer idioma funcionar com a infraestrutura de DNS existente.

O Problema que Punycode Resolve

O Sistema de Nome de Domínio foi projetado nos anos 80 com apenas caracteres ASCII em mente. Os labels de DNS podem conter apenas:

Esta limitação excluía bilhões de usuários da internet que não usam principalmente o alfabeto latino. Punycode preenche essa lacuna codificando qualquer string Unicode em ASCII válido.

Como Funciona a Codificação Punycode

Punycode usa um algoritmo inteligente que preserva caracteres ASCII enquanto codifica caracteres não-ASCII em uma representação ASCII compacta.

O Processo de Codificação

1. Separar Caracteres: Dividir em caracteres ASCII e não-ASCII

2. Copiar ASCII: Manter todos os caracteres ASCII em suas posições originais

3. Codificar Não-ASCII: Usar uma codificação de inteiro de comprimento variável generalizada

4. Adicionar Prefixo: Preparar "xn--" para indicar codificação Punycode

Exemplos

Original (Unicode)Codificado (Punycode)
münchenxn--mnchen-3ya
北京xn--fiqs8s
münchen.dexn--mnchen-3ya.de
中文.comxn--fiq228c.com
café.comxn--caf-dma.com

O Prefixo "xn--"

O prefixo "xn--" é chamado de ACE (ASCII Compatible Encoding). Ele sinaliza aos resolvedores DNS e aplicações que o label contém conteúdo codificado em Punycode. Este prefixo:

Punycode na Prática

Manipulação do Navegador

Os navegadores modernos manipulam Punycode automaticamente:

Usuário digita: 中文.com

Navegador envia: xn--fiq228c.com (para DNS)

Navegador exibe: 中文.com (na barra de endereços)

Implementação para Desenvolvedores

JavaScript (Node.js):
const punycode = require('punycode/');

// Codificar para Punycode

const encoded = punycode.toASCII('münchen.de');

// Resultado: xn--mnchen-3ya.de

// Decodificar de Punycode

const decoded = punycode.toUnicode('xn--mnchen-3ya.de');

// Resultado: münchen.de

Python:
domain = 'münchen.de'

encoded = domain.encode('idna').decode('ascii')

# Resultado: xn--mnchen-3ya.de

Manipulação de URL

Ao trabalhar com URLs contendo IDNs:

// A API URL manipula Punycode automaticamente

const url = new URL('https://中文.com/path');

console.log(url.hostname); // xn--fiq228c.com

console.log(url.href); // https://xn--fiq228c.com/path

Implicações de Segurança

A capacidade de Punycode representar qualquer caractere Unicode cria riscos de segurança:

Spoofing Visual

Os atacantes podem registrar domínios que parecem idênticos aos sites legítimos:

аррlе.com (Cirílico 'а' e 'р')

apple.com (Letras latinas)

Ambos exibem identicamente em algumas fontes, mas são domínios diferentes.

Proteções do Navegador

Para combater spoofing, navegadores implementam proteções:

1. Detecção de Script Misto: Exibir Punycode para IDNs suspeitos em vez da forma Unicode

2. Detecção Confundível: Sinalizar domínios usando caracteres que parecem ASCII

3. Whitelist: Permitir exibição Unicode apenas para TLDs bem conhecidas

Trabalhando com Punycode em APIs

Ao construir ferramentas de domínio:

Sempre Armazene Punycode: Use o formato ASCII internamente para consistência e indexação de banco de dados. Aceite Ambas as Formas: Deixe os usuários inserir Unicode ou Punycode, convertendo conforme necessário. Exiba Unicode: Mostre a forma legível para humanos em interfaces de usuário.
function normalizeDomain(input) {

const punycode = require('punycode/');

// Converter para Punycode em minúsculas para uso interno

return punycode.toASCII(input.toLowerCase());

}

Punycode é transparente para a maioria dos usuários, mas conhecimento essencial para desenvolvedores construindo aplicações web internacionalizadas.

Coloque este Conhecimento em Prática

Use a API DomScan para verificar disponibilidade de domínio, saúde e muito mais.