Punycode

Fondamentaux des Domaines
Un système de codage qui convertit les noms de domaine Unicode au format compatible ASCII, permettant aux noms de domaine internationalisés de fonctionner avec DNS.
← Retour au Glossaire

Qu'est-ce que Punycode?

Punycode est une syntaxe d'encodage définie dans le RFC 3492 qui transforme les chaînes Unicode en l'ensemble limité de caractères ASCII supporté par DNS. C'est la fondation technique qui rend possible les noms de domaine internationalisés (IDN), permettant aux noms de domaine dans n'importe quelle langue de travailler avec l'infrastructure DNS existante.

Le problème Punycode Solves

Le système de noms de domaine a été conçu dans les années 1980 avec seulement des caractères ASCII à l'esprit. Les étiquettes DNS ne peuvent contenir que:

Cette limitation excluait des milliards d'internautes qui n'utilisent pas principalement l'alphabet latin. Punycode règle cette lacune en codant n'importe quelle chaîne Unicode en ASCII valide.

Comment fonctionne le codage Punycode

Punycode utilise un algorithme intelligent qui préserve les caractères ASCII tout en encodant des caractères non ASCII dans une représentation ASCII compacte.

Le processus de codage

1. Caractères distincts: Séparer en caractères ASCII et non ASCII

2. Copier ASCII: Conservez tous les caractères ASCII dans leurs positions originales

3. Encoder Non-ASCII : Utiliser un encodage entier de longueur variable généralisée

4. Ajouter le préfixe: Prépendre "xn--" pour indiquer l'encodage Punycode

Exemples

Original (Unicode)Encodé (code Puny)
münchenxn--mnchen-3ya
(En milliers de dollars des États-Unis)xn--fiqs8s
München.dexn--mnchen-3ya.de
中文.comxn--fiq228c.com
café.comxn--caf-dma.com

Le préfixe "xn--"

Le préfixe "xn--" s'appelle le préfixe ACE (ASCII Compatible Encoding). Il signale aux résolveurs DNS et aux applications que l'étiquette contient du contenu encodé par Punycode. Ce préfixe:

Punycode en pratique

Gestion du navigateur

Les navigateurs modernes gèrent automatiquement Punycode :

User types: 中文.com

Browser sends: xn--fiq228c.com (to DNS)

Browser displays: 中文.com (in address bar)

Mise en œuvre du développeur

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

// Encode to Punycode

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

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

// Decode from Punycode

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

// Result: münchen.de

Python:
domain = 'münchen.de'

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

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

Gestion de l'URL

Lorsque vous travaillez avec des URL contenant des IDN:

// URL API handles Punycode automatically

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

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

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

Incidences sur la sécurité

La capacité de Punycode à représenter n'importe quel caractère Unicode crée des risques de sécurité :

Spoofing visuel

Les attaquants peuvent enregistrer des domaines qui semblent identiques aux sites légitimes :

аррlе.com (Cyrillic 'а' and 'р')

apple.com (Latin letters)

Les deux affichent de façon identique dans certaines polices mais sont des domaines différents.

Protections du navigateur

Pour lutter contre le spoofing, les navigateurs mettent en place des protections :

1. Mixed Script Detection: Display Punycode pour les domaines mélangeant les scripts de manière suspecte

2. Détection fiable: Domaines d'affichage utilisant des caractères qui ressemblent à ASCII

3. Liste blanche: Permettre l'affichage Unicode uniquement pour les TLD bien connus

Travailler avec Punycode dans les API

Lors de la construction d'outils de domaine :

Toujours stocker Punycode: Utilisez le formulaire ASCII en interne pour la cohérence et l'indexation des bases de données. Acceptez les deux formulaires: Laissez les utilisateurs entrer soit Unicode ou Punycode, conversion au besoin. Afficher Unicode: Afficher le formulaire lisible par l'homme dans les interfaces utilisateur.
function normalizeDomain(input) {

const punycode = require('punycode/');

// Convert to lowercase Punycode for internal use

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

}

Punycode est transparent pour la plupart des utilisateurs, mais les connaissances essentielles pour les développeurs construisant des applications web internationalisées.

Mettez Vos Connaissances en Pratique

Utilisez l'API de DomScan pour vérifier la disponibilité des domaines, la santé et bien d'autres choses.