El IETF establece en el estándar RFC 3492 que Punycode es una de las posibles aplicaciones de un algoritmo de codificación general conocido como Bootstring. El algoritmo Bootstring permite representar cadenas de caracteres con una selección limitada de elementos. El desarrollo del procedimiento de codificación se basa en seis principios:
- Integridad: con Bootstring cada cadena de salida puede estar representada por una cadena simplificada.
- Univocidad: la clasificación de la cadena de salida y su codificación Bootstring es inequívoca. A cada Punycode se le puede asignar exactamente un equivalente en ASCII y viceversa.
- Reversibilidad: la codificación mediante Bootstring puede deshacerse sin perder información.
- Eficiencia: la cadena de caracteres codificada solo supera mínimamente en longitud (a veces, ni siquiera) a la cadena de salida.
- Sencillez: Bootstring utiliza algoritmos de codificación y decodificación sencillos.
- Legibilidad: solo se codifican aquellos caracteres que no se pueden representar en el cuerpo de caracteres de destino. El resto de caracteres permanecen igual.
Bootstring especifica a Punycode de acuerdo con los requisitos de los nombres de dominio internacionalizados. Esto debería permitir representar caracteres Unicode con los caracteres básicos permitidos hasta ahora.
A continuación, mostramos esta sintaxis con el siguiente ejemplo:
IDN: azulejos-coruña
El IDN azulejos-coruña contiene la letra “ñ”, no incluida dentro de los caracteres antes permitidos para los nombres de dominio y que, por lo tanto, debe codificarse mediante Punycode para garantizar la compatibilidad.
En el primer paso, el proceso de codificación prevé una normalización de la cadena de caracteres de salida (así, todas las letras mayúsculas se sustituyen por minúsculas).
En el segundo paso, se eliminan todos los caracteres no ASCII, sustituyéndolos en el dominio por su forma codificada y separándose por un guion.
Al codificar direcciones de Internet con Punycode, cada cadena resultante va acompañada del prefijo ACE (abreviatura de ASCII Compatible Encoding):
Prefijo ACE: xn--
El prefijo ACE garantiza que los nombres de dominio que contienen guiones no sean interpretados erróneamente como nombres de dominio internacionales.
Finalmente, como resultado codificado para azulejos-coruña se obtiene:
ACE: xn--azulejos-corua-2nb