Was bedeutet Punycode?

Veröffentlicht am 26 Januar 2023, 14:40 Uhr

 

Was ist ein Punycode?

Punycode bezeichnet ein standardisiertes Kodierungsverfahren. Es dient zur gegenseitigen Umwandlung von Unicode (UTF-8) und ASCII-Zeichen.

Anwendung findet das Verfahren hauptsächlich bei der Verarbeitung von IDN (internationalisierte Domainnamen), die neben den Basiszeichen auch weitere Nicht-Basiszeichen enthalten.

Zur eindeutigen Umwandlung kommt der Standard IDNA (Internationalizing Domain Names in Applications) zur Ergänzung des ASCII-Zeichensatzes zur Anwendung.

Dadurch können Unicode-Zeichen anhand des Zeichensatzes ASCII, bestehend aus folgenden Zeichen, abgebildet werden:

  • Kleinbuchstaben: a bis z
  • Ziffern: 0 bis 9
  • Sonderzeichen: Bindestrich (-)

 

Entwicklung des Punycode-Verfahrens

Punycode wurde von der IETF (Internet Engineering Task Force) im Jahr 2003 standardisiert. Es bezeichnet die Syntax zur Kodierung von IDNA (internationalisierter Domainnamen in Anwendungen).

Von der IETF wird IDN als Domainnamen, die zu den Buchstaben des lateinischen Alphabets zusätzlich Sonderzeichen (z.B. Umlaute, Diakritika oder andere Schriftzeichen aus anderen Alphabeten), bezeichnet. Solche Umlautdomains können von grundlegenden Protokollen wie etwa dem DNS (Domain-Name-System) nicht interpretiert werden.

Ein unter der Top-Level-Domain .de stehender Domainname „über-öl-förderung.de“ ist zwar seit Einführung von IDN zulässig, jedoch ist die Möglichkeit der Verarbeitung, etwa im Rahmen der Namensauflösung, nur durch die Kodierung von Nicht-Basiszeichen gegeben.

Nachdem die englische Sprache Grundlage vieler dem Internet zugrunde liegende Protokolle ist, unterstützen diese nur den eingeschränkten ASCII-Zeichensatz.

Zur Gewährleistung der Kompatibilität zwischen IDNs und älteren Internetstandards hat man bei der IETF die Kodierung internationaler Domainnamen mit den bisher erlaubten Zeichen festgesetzt und mit Punycode ein entsprechendes Verfahren zum Standard gemacht.

Funktionsweise der Punycode-Kodierung

Die IETF definiert Punycode in RFC 3492 als Anwendungsmöglichkeit eines als Bootstring benannten generischen Kodierungsalgorithmus, der auch als Bootstring-Algorithmus bezeichnet wird. Dieser Algorithmus ermöglicht eine eindeutige Abbildung von Strings beliebiger Zeichensätze mit einer eingeschränkten Teilmenge an Elementen.

Sechs Prinzipien bilden die Basis für die Entwicklung des Kodierungsverfahrens:

  1. Vollständigkeit: Jede Ausgangszeichenkette hat eine eindeutige Abbildung auf eine vereinfachte Zeichenkette per Bootstring
  2. Eindeutigkeit: Die Abbildung der Ausgangskette auf die jeweilige Bootstring-Kodierung ist eindeutig. Jeder Punycode hat genau ein ASCII-Pendant und umgekehrt.
  3. Reversibilität: Eine Bootstring-Kodierung ist ohne Informationsverlust rückgängig zu machen
  4. Effizienz: Die Länge der kodierten Zeichenkette ist nur minimal größer als die Ausgangszeichenkette
  5. Einfachheit: Bootstring verwendet einfache Kodierungs- und Dekodierungsalgorithmen
  6. Lesbarkeit: Alle Zeichen bleiben unverändert, außer jene, die im resultierenden Zeichensatz nicht darstellbar sind

Im ersten Schritt des Algorithmus wird eine Normalisierung der Ausgangszeichenkette vorgenommen. Dabei werden Großbuchstaben durch Kleinbuchstaben ersetzt oder Ligaturen wie das „scharfe ß“ werden in einzelne Zeichen (ss) aufgelöst.


Der zweite Schritt besteht aus einer Tilgung aller Nicht-Basiszeichen, die in kodierter Form durch einen Bindestrich getrennt an den Domainnamen angehängt werden.
Bei der Kodierung von Internetadressen wird beim Punycode-Verfahren jede resultierende Zeichenkette mit einem ACE-Präfix (ASCII Compatible Encoding) erweitert. Dieser stellt sicher, dass Domainnamen mit Bindestrichen nicht irrtümlich als internationale Domainnamen angesehen werden.

Als Beispiel betrachte man etwa den Domainnamen mañana.com. Dieser wird nach dem Punycode Verfahren zu xn—maana-pta.com, mit dem ACE-Präfix xn--.

Ein kostenloser Punycode-Converter ermöglicht es Anwendern eine Punycode-Konvertierung durchzuführen.

 

Kostenloser Punycode-Converter

Als Beispiel für einen Punycode-Converter sei der kostenlose Punycode-Converter DENIC eG genannt. Dieses Werkzeug konvertiert internationale Domainnamen entsprechend den DNA-Standards RFC 5890 bis RFC 5894.

Er unterstützt dabei Unicode 5.2 als auch den Unicode Technical Standard 46, welcher zur Minimierung von Inkompatibilitäten zwischen zweier IDNA Versionen (IDNA2003, IDNA2008) dient.

Der quelloffene Punycode-Converter, implementiert von Mathias Bynens, basiert auf punycode.js und eignet sich sehr gut für IDNs anderer TLDs.

 

Fazit

Punycode ist ein standardisiertes Kodierungsverfahren, das in RFC 3492 definiert ist. Es dient zur Darstellung von Unicode Zeichenfolgen mit der begrenzten Menge an ASCII Zeichen, etwa zur Verwendung einer Domain.

Punycode codiert Domainnamen mit Unicode-Zeichen in eine Teilmenge von ASCII, bestehend aus den Kleinbuchstaben (a bis z), den Ziffern (0-9) und dem Bindestrich, die als Basiszeichen bezeichnet werden.

 

____________________

Für eine professionelle Beratung, nimm gerne Kontakt mit uns auf. Gerne betreuen wir dich auch bei der Website Erstellung sowie bei der Pflege und Wartung