Punycode

Fundamentos de Dominios
Un sistema de codificación que convierte nombres de dominio Unicode a formato compatible con ASCII, permitiendo que nombres de dominio internacionalizados funcionen con DNS.
← Volver al Glosario

¿Qué es Punycode?

Punycode es una sintaxis de codificación definida en RFC 3492 que transforma cadenas Unicode en el conjunto de caracteres ASCII limitado soportado por DNS. Es la base técnica que hace posibles los Nombres de Dominio Internacionalizados (IDN), permitiendo que nombres de dominio en cualquier idioma funcionen con la infraestructura DNS existente.

El problema que Punycode resuelve

El Sistema de Nombres de Dominio fue diseñado en los años 80 con solo caracteres ASCII en mente. Las etiquetas DNS solo pueden contener:

Esta limitación excluía a miles de millones de usuarios de internet que no utilizan principalmente el alfabeto latino. Punycode cierra esta brecha codificando cualquier cadena Unicode en ASCII válido.

Cómo funciona la codificación Punycode

Punycode utiliza un algoritmo inteligente que preserva caracteres ASCII mientras codifica caracteres no ASCII en una representación ASCII compacta.

El proceso de codificación

1. Separar caracteres: Dividir en caracteres ASCII y no ASCII

2. Copiar ASCII: Mantener todos los caracteres ASCII en sus posiciones originales

3. Codificar no ASCII: Utilizar una codificación de entero variable de longitud generalizada

4. Añadir prefijo: Anteponer "xn--" para indicar codificación Punycode

Ejemplos

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

El prefijo "xn--"

El prefijo "xn--" se llama el prefijo ACE (Codificación Compatible con ASCII). Señala a los solucionadores DNS y aplicaciones que la etiqueta contiene contenido codificado en Punycode. Este prefijo:

Punycode en la práctica

Manejo del navegador

Los navegadores modernos manejan Punycode automáticamente:

Usuario escribe: 中文.com

Navegador envía: xn--fiq228c.com (a DNS)

Navegador muestra: 中文.com (en barra de dirección)

Implementación de desarrollador

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

// Codificar a Punycode

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

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

// Decodificar desde 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

Manejo de URL

Al trabajar con URL que contienen IDN:

// La API URL maneja Punycode automáticamente

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

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

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

Implicaciones de seguridad

La capacidad de Punycode para representar cualquier carácter Unicode crea riesgos de seguridad:

Suplantación visual

Los atacantes pueden registrar dominios que se ven idénticos a sitios legítimos:

аррlе.com (cirílico 'а' y 'р')

apple.com (letras latinas)

Ambos se muestran idénticamente pero son dominios diferentes.

Protecciones del navegador

Para combatir la suplantación, los navegadores implementan protecciones:

1. Detección de script mixto: Muestra Punycode para dominios sospechosos que mezclan scripts

2. Detección confusa: Marca dominios utilizando caracteres que se parecen a ASCII

3. Lista blanca: Permite visualización Unicode solo para TLD bien conocidos

Trabajar con Punycode en API

Al construir herramientas de dominio:

Siempre almacene Punycode: Utilice la forma ASCII internamente para consistencia e indexación de base de datos. Acepte ambas formas: Permita que los usuarios ingresen Unicode o Punycode, convirtiendo según sea necesario. Muestre Unicode: Muestre la forma legible por humanos en interfaces de usuario.
function normalizeDomain(input) {

const punycode = require('punycode/');

// Convertir a minúsculas Punycode para uso interno

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

}

Punycode es transparente para la mayoría de los usuarios pero es conocimiento esencial para desarrolladores que construyen aplicaciones web internacionalizadas.

Pon Este Conocimiento en Práctica

Usa la API de DomScan para comprobar disponibilidad de dominios, estado y mucho más.