O papel do Punycode em IDNs
O DNS tradicional transporta rótulos ASCII. Punycode, definido na RFC 3492, codifica pontos de código não ASCII numa sequência composta por letras, dígitos e hífens.
Em nomes de domínio, um rótulo codificado recebe o prefixo xn-- e é chamado A-label. Cada parte entre pontos é processada de forma independente; o algoritmo não deve codificar o domínio inteiro como uma única cadeia.
Esta implementação cobre a transformação Punycode e uma validação conservadora de rótulos. Não substitui o processamento completo UTS #46 dos navegadores e registos.
Como converter Punycode
- Escolha Domínio completo para processar cada rótulo entre pontos ou Rótulo único para uma parte isolada.
- Use Codificar com um nome Unicode e Descodificar com um A-label ou domínio ASCII.
- Mantenha hífens e pontos na posição correta; rótulos vazios são rejeitados.
- Verifique a forma minúscula canónica antes de usar o valor em configuração DNS.
- Valide separadamente regras de registo, homógrafos e disponibilidade do domínio.
Exemplos de rótulos e domínios Punycode
Os casos cobrem rótulo único, domínio completo, maiúsculas e minúsculas, separadores Unicode e ponto raiz final.
| Entrada | Saída | Direção da conversão | Notas |
|---|---|---|---|
bücher |
xn--bcher-kva |
Codificar | Rótulo alemão. Um rótulo Unicode transforma-se num A-label com o prefixo xn--. |
mañana |
xn--maana-pta |
Codificar | Rótulo espanhol. A carga RFC 3492 é maana-pta; a forma A-label de DNS acrescenta xn--. |
例子 |
xn--fsqu00a |
Codificar | Rótulo chinês. Um rótulo sem carateres ASCII básicos produz uma carga totalmente codificada. |
Münich.Example |
xn--mnich-kva.example |
Codificar | Domínio completo. Cada rótulo é processado separadamente e a saída ASCII é normalizada para minúsculas. |
例子。测试 |
xn--fsqu00a.xn--0zwm56d |
Codificar | Ponto Unicode. Separadores ideográficos são normalizados para ponto ASCII. |
XN--BCHER-KVA.example |
bücher.example |
Descodificar | Descodificar A-label. A comparação de rótulos ASCII não distingue maiúsculas de minúsculas e a forma A-label devolvida fica em minúsculas. |
Rótulos, pontos, maiúsculas e minúsculas
A ferramenta normaliza pontos Unicode comuns para ‘.’ e converte rótulos para minúsculas. Um ponto raiz final é permitido e preservado.
Rótulos devem ter de 1 a 63 carateres ASCII após a codificação, não podem começar ou terminar com hífen e o domínio codificado não pode exceder 253 carateres sem o ponto raiz.
- O modo de rótulo não aceita pontos.
- Rótulos vazios entre dois pontos são inválidos.
- Letras, marcas, números e hífens formam o perfil Unicode suportado.
- A-labels devem começar com xn-- e ser canónicos.
- Emoji e símbolos fora do perfil conservador são rejeitados.
Como o algoritmo Bootstring funciona
Punycode copia primeiro os carateres ASCII básicos e depois representa os pontos não ASCII como deltas variáveis. Um viés adaptativo mantém números menores para padrões próximos.
O descodificador desfaz esses deltas, insere pontos de código nas posições corretas e rejeita overflow, dígitos inválidos e substitutos.
A implementação usa diretamente a RFC 3492, sem dependências adicionais. Isto evita novos custos e licenças, mas as regras modernas de IDNA continuam a ser responsabilidade do sistema que consome o domínio.
Quando Punycode é necessário
Punycode permite representar nomes internacionais em campos que aceitam apenas rótulos DNS ASCII.
| Item | Descrição |
|---|---|
| Configuração DNS | Painéis podem exigir o A-label xn-- em vez do nome Unicode visível. |
| Análise de links | Mostrar as duas formas ajuda a rever destinos internacionais. |
| Migração de dados | Sistemas antigos podem armazenar a forma ASCII canónica. |
| Depuração de certificados | SANs e logs podem exibir Punycode. |
| Validação de entrada | Limites por rótulo detetam nomes impossíveis antes de uma consulta. |
Erros e riscos de domínio
Punycode válido não significa que o domínio seja seguro, registado ou permitido. Carateres visualmente semelhantes podem formar ataques de homógrafo.
Registos aplicam IDNA, normalização, listas de carateres e políticas por TLD. Esta ferramenta não consulta essas políticas.
- Não trate xn-- como prova de legitimidade.
- Dois pontos consecutivos criam rótulo vazio.
- Hífen no início ou fim é inválido.
- Rótulo acima de 63 carateres é inválido.
- Descodificação canónica é verificada por recodificação.
Punycode comparado a URL encoding e IDNA
Punycode codifica rótulos de domínio Unicode. Percent-encoding codifica bytes em outros componentes de uma URL e não deve substituir Punycode no host.
IDNA é o conjunto maior de regras que decide quais nomes Unicode são aceitáveis e como são mapeados. Punycode é apenas o algoritmo reversível interno.
| Item | Descrição |
|---|---|
| IDNA / UTS #46 | Adiciona mapeamento, normalização e regras de validade usadas por navegadores. |
| URL encoding | Representa bytes com %HH em caminhos, consultas e outros componentes. |
| DNS ASCII | Usa A-labels resultantes, mas ainda depende de resolução e políticas externas. |