Punycode
Punycode ist ein standardisiertes Kodierungsverfahren, das Unicode-Zeichen in einen begrenzten ASCII-Zeichensatz übersetzt. Dadurch können internationalisierte Domain-Namen (IDN) auch Sonderzeichen wie Umlaute enthalten.
Entstehung des Kodierungsverfahrens
Punycode wurde 2003 von der Internet Engineering Task Force (IETF) als Syntax zur Kodierung internationalisierter Domain-Namen in Anwendungen (IDNA) festgelegt. Unter IDN versteht die IETF Domains, die neben dem lateinischen Alphabet auch Umlaute oder Schriftzeichen anderer Alphabete nutzen. Da Basis-Protokolle wie das Domain Name System (DNS) diese nicht direkt verarbeiten, spricht man im deutschsprachigen Raum oft von Umlautdomains.
Ein Domain-Name wie müller-büromöbel ist unter der Endung .de seit der IDN-Einführung erlaubt. Für die technische Verarbeitung – etwa bei der Namensauflösung – ist jedoch eine Umwandlung nötig. Viele Internet-Protokolle basieren auf Englisch und unterstützen daher nur den eingeschränkten ASCII-Zeichensatz.
Um die Kompatibilität von IDNs mit alten Internetstandards zu sichern, schrieb die IETF die Kodierung mit herkömmlichen Zeichen vor. Als Lösung wurde dafür das Verfahren Punycode standardisiert.
Bei E-Mail-Adressen greift Punycode nur beim Teil nach dem @-Zeichen (der Domain). Der lokale Teil davor wird mittels UTF-8 kodiert, falls er Sonderzeichen enthält.
So funktioniert die Punycode-Kodierung
Das Verfahren im Überblick
In RFC 3492 definiert die IETF Punycode als Anwendung eines Bootstring-Algorithmus. Dieser Bootstring-Algorithmus bildet beliebige Zeichensätze eindeutig mit einer kleinen Auswahl an Elementen ab. Bei Punycode sind das die Basiszeichen: Kleinbuchstaben, Ziffern und der Bindestrich (-). Das Verfahren basiert auf sechs Prinzipien:
- Vollständigkeit: Jede Kette lässt sich per Bootstring vereinfacht darstellen.
- Eindeutigkeit: Die Zuordnung ist fix. Jedem Punycode entspricht genau ein ASCII-Gegenstück.
- Reversibilität: Die Umwandlung lässt sich ohne Datenverlust jederzeit umkehren.
- Effizienz: Der kodierte Text bleibt in der Länge fast identisch zum Original.
- Einfachheit: Die Algorithmen für den Wechsel sind unkompliziert aufgebaut.
- Lesbarkeit: Nur nicht darstellbare Zeichen werden kodiert. Alles andere bleibt gleich.
Punycode passt Bootstring exakt an die Anforderungen internationaler Domains an, um Unicode-Zeichen über Basiszeichen abzubilden.
Praxisbeispiel
Hier siehst du, wie die Kodierung konkret abläuft.
IDN: müller-büromöbel
Dieser Name enthält mit ü und ö Zeichen, die nicht im Standard-Satz für Domains vorkommen. Deshalb muss er via Punycode umgewandelt werden.
Schritt 1: Normalisierung
Zuerst wird die Zeichenkette normalisiert: Großbuchstaben werden klein, und Ligaturen wie das ß werden zu „ss“ aufgelöst.
Schritt 2: Entfernen der Sonderzeichen
Alle Nicht-Basiszeichen werden entfernt. Sie werden am Ende in kodierter Form, getrennt durch einen Bindestrich, wieder angefügt.
Für Internetadressen bekommt das Ergebnis zusätzlich ein ACE-Präfix (ASCII Compatible Encoding):
ACE-Präfix: xn–
Dieses Präfix verhindert, dass Domains mit Bindestrichen irrtümlich als internationale Domains gedeutet werden.
Die fertige Kodierung für müller-büromöbel lautet:
ACE: xn–mller-brombel-rmb4fg
Der schlaue Algorithmus sorgt dafür, dass die Maximallänge von 63 Zeichen pro Domain-Label nicht überschritten wird.
Dabei werden Zeichen nicht einfach eins zu eins ersetzt. Der Algorithmus berechnet einen String aus den Abständen und Positionen der entfernten Zeichen.
Im Beispiel zeigt rmb4fg an, wo im Reststring mller-brombel die Zeichen ü und ö wieder eingefügt werden müssen.

Sonderfälle
Es gibt Ausnahmen, wenn ein Domain-Name nur aus Sonderzeichen oder nur aus Basiszeichen besteht.
Besteht eine Domain nur aus Nicht-Basiszeichen, sieht man nach der Kodierung nur das Präfix und die kodierte Folge. Ein Beispiel ist παράδειγμα (griechisch für „Beispiel“):
IDN: παράδειγμα
ACE: xn–hxajbheg2az3al
Enthält ein Name nur Basiszeichen, wird Punycode nicht genutzt. Es gibt dann auch kein Präfix, da die Domain ohnehin von allen Protokollen verstanden wird.
Beim Fully Qualified Domain Name (FQDN) wird jeder Teil (wie Top-Level- oder Subdomain) einzeln kodiert. So wird aus пример.бг (bulgarisch für beispiel.bg):
IDN: пример.бг
ACE: xn–e1afmkfd.xn–90ae
Die Tabelle zeigt die verschiedenen Varianten im Überblick:
| IDN | Punycode | ACE | |
|---|---|---|---|
| Gemischte Zeichen | müller-büromöbel.de
|
mller-brombel-rmb4fg.de
|
xn--mller-brombel-rmb4fg.de
|
| Nur Sonderzeichen | Παράδειγμα.gr
|
hxajbheg2az3al.gr
|
xn--hxajbheg2az3al.gr
|
| Nur Basiszeichen | example.org
|
example.org
|
Nicht notwendig |
Details zum Algorithmus findest du in RFC 3492, inklusive einer Umsetzungshilfe in der Programmiersprache C.
In der Praxis nutzt man für die Umwandlung meist einfache Punycode-Converter aus dem Web.
Punycode bei Emoji-Domains
Auch Emoji-Domains funktionieren über Punycode. Das klappt, wenn die jeweilige Endung Emojis erlaubt und das Symbol im Unicode-Standard steht.
Aktuell erlauben unter anderem diese TLDs Emoji-Domains: .ws, .tk, .to, .ml, .ga, .cf, .gq und .fm.
Technisch sind es Punycode-Strings, die für dich eigentlich als bunte Icons erscheinen sollten.
Emoji-Domain: https://i❤.ws/
ACE: https://xn--i-7iq.ws/
Aktuell zeigen gängige Browser wie Firefox oder Chrome in der Adresszeile meist nur den ACE-String anstatt des Emojis an.
Gratis Punycode-Converter
Im Netz gibt es viele kostenlose Tools, um IDNs in die ASCII-Form zu bringen.
Für österreichische oder deutsche Domains empfehlen wir den IDN-Web-Converter der DENIC eG. Er arbeitet nach modernsten Standards und minimiert Fehler zwischen verschiedenen IDNA-Versionen.

Für internationale Endungen eignet sich der Punycode-Converter von Mathias Bynens, der auf dem bewährten Tool punycode.js basiert.

Ist Punycode ein Sicherheitsrisiko?
Problematisch wird Punycode bei homografischen Phishing-Attacken. Hier nutzen Angreifer ähnlich aussehende Zeichen aus, um User auf gefälschte Seiten zu locken. Ein solcher Phishing-Angriff wird oft durch URLs wie https://www.xn--80ak6aa92e.com/ getarnt, die im Browser dann wie https://www.аррӏе.com/ aussehen.
Das führt dann nicht zu Apple, sondern auf eine präparierte Testseite.
Statt des normalen „a“ wird ein kyrillisches „а“ verwendet. Mit freiem Auge ist das kaum zu sehen, für den Browser sind es aber zwei völlig verschiedene Ziele. Auch SSL-Zertifikate bieten hier keinen Schutz, da Kriminelle für ihre Fake-Domains problemlos echte Zertifikate erhalten können.
Moderne Browser wie Chrome zeigen bei Verdacht lieber den ACE-String an, Microsoft Edge blockiert solche Seiten oft direkt. Firefox bietet standardmäßig noch weniger Schutz vor dieser Masche.

Schutz für Firefox-Nutzer: Du kannst die automatische Übersetzung in IDNs im Browser deaktivieren:
- Konfigurationsmenü: Tippe about:config in die Adresszeile ein.
- Punycode erzwingen: Suche nach network.IDN_show_punycode und stelle den Wert per Doppelklick auf true um.
Danach zeigt Firefox internationale Domains in der Adresszeile nur noch als ACE-String an.