Punycode est défini par l‘IETF dans la RFC 3492 comme une application possible d’un algorithme de codage général appelé Bootstring (chaîne de démarrage). L’algorithme de bootstring permet aux chaînes de caractères arbitraires d’être mappées de façon unique avec une sélection limitée d’éléments. Le développement de la méthode de codage repose sur six principes :
- Complétude : chaque chaîne de caractères peut être liée à une chaîne simplifiée à l’aide de bootstring.
- Unicité : l’attribution de la chaîne de caractères au codage bootstrip correspondant est unique. Il est possible d’attribuer exactement à chaque Punycode une équivalence ASCII et inversement.
- Réversibilité : le codage par bootstring peut être inversé à tout moment sans perte d’information.
- Efficacité : la chaîne encodée n’est, le cas échéant, que très peu plus longue que la chaîne initiale.
- Simplicité : Bootstring utilise des algorithmes de codage et de décodage simples.
- Lisibilité : sont codés uniquement les caractères qui ne peuvent pas être représentés dans le jeu de caractères cible. Tous les autres caractères restent inchangés.
Punycode spécifie le bootstring selon les exigences des noms de domaine internationalisés. Cela devrait permettre de représenter les caractères Unicode par rapport aux caractères de base précédemment autorisés.
Nous illustrons le codage avec l’exemple suivant :
IDN : Château-Lucé
L’IDN Château-Lucé contient un caractère â et un é, qui ne sont pas inclus dans le jeu de caractères du nom de domaine précédemment autorisé et doivent donc être encodés en utilisant un code Punycode pour pouvoir assurer la compatibilité.
Dans la première étape, la procédure de codage prévoit une normalisation de la chaîne de caractères de sortie. Toutes les lettres majuscules sont remplacées par des lettres minuscules
Dans la deuxième étape, tous les caractères qui ne sont pas de base sont remplacés. Ceux-ci sont ensuite ajoutés au nom de domaine sous forme codée et séparés par un trait d’union.
Si la méthode punycode est utilisée pour encoder les adresses Internet, chaque chaîne de résultat est pourvue d’un préfixe ACE (abréviation pour ASCII Compatible Encoding) :
Préfixe ACE :xn--
Le préfixe ACE garantit que les noms de domaine contenant des tirets ne sont pas interprétés à tort comme des noms de domaine internationaux.
Pour Château-Lucé, il en résulte le codage suivant :
ACE : xn--chteau-luc-44a6g