Punycode wird von der IETF in RFC 3492 als Anwendungsmöglichkeit eines als Bootstring bezeichneten allgemeinen Kodierungsalgorithmus definiert. Der Bootstring-Algorithmus erlaubt es, Zeichenfolgen beliebiger Zeichensätze mit einer limitierten Auswahl an Elementen eindeutig abzubilden. Der Entwicklung des Kodierungsverfahrens liegen sechs Prinzipien zugrunde:
- Vollständigkeit: Jede Ausgangszeichenkette lässt sich per Bootstring auf eine vereinfachte Zeichenkette abbilden.
- Eindeutigkeit: Die Zuordnung der Ausgangszeichenkette zur jeweiligen Bootstring-Kodierung ist eindeutig. Jedem Punycode kann genau ein ASCII-Pendant zugewiesen werden und umgekehrt.
- Reversibilität: Die Kodierung per Bootstring lässt sich jederzeit ohne Informationsverlust rückgängig machen.
- Effizienz: Die kodierte Zeichenkette ist – wenn überhaupt – nur minimal länger als die Ausgangszeichenkette.
- Einfachheit: Bootstring greift auf einfache Kodierungs- und Dekodierungsalgorithmen zurück.
- Lesbarkeit: Es werden nur die Zeichen codiert, die sich im Zielzeichensatz nicht darstellen lassen. Alle anderen Zeichen bleiben unverändert.
Punycode spezifiziert Bootstring gemäß der Ansprüche an internationalisierte Domainnamen. Das soll die Abbildung von Unicode-Zeichen über die bislang zulässigen Basiszeichen ermöglichen.
Wir veranschaulichen die Kodierung an folgendem Beispiel.
IDN: müller-büromöbel
Der IDN müller-büromöbel beinhalten mit ü und ö zwei Zeichen, die im bislang zulässigen Zeichensatz für Domainnamen nicht enthalten sind und daher zur Wahrung der Kompatibilität über Punycode kodiert werden müssen.
Das Kodierungsverfahren sieht im ersten Schritt eine Normalisierung der Ausgangszeichenkette vor. Alle Großbuchstaben werden durch entsprechende Kleinbuchstaben ersetzt. Ligaturen wie das ß werden in einzelne Zeichen aufgelöst (ss).
Im zweiten Schritt findet eine Tilgung aller Nicht-Basiszeichen statt. Diese werden anschließend in kodierter Form und durch einen Bindestrich abgetrennt an den Domainnamen angefügt.
Kommt das Punycode-Verfahren zur Kodierung von Internetadressen zum Einsatz, wird jeder Ergebnisstring mit einem sogenannten ACE-Präfix versehen (kurz für ASCII Compatible Encoding = ASCII-kompatible Kodierung):
ACE-Präfix:xn--
Das ACE-Präfix stellt sicher, dass Domainnamen, die Bindestriche enthalten, nicht fälschlicherweise als internationale Domainnamen interpretiert werden.
Für den IDN müller-büromöbel ergibt sich somit folgende Kodierung:
ACE: xn--mller-brombel-rmb4fg