Punycode
aus Wikipedia, der freien Enzyklopädie
Punycode ist ein Kodierungsverfahren zum Umwandeln von Unicode-Zeichenketten in sogenannte ACE-Zeichenketten, die nur noch aus ASCII-Zeichen bestehen. Punycode wurde entworfen, um Domainnamen aus Unicodezeichen eindeutig und umkehrbar durch ASCII-Zeichen darzustellen.
Inhaltsverzeichnis |
[Bearbeiten] Motivation
Wichtigste Motivation für die Einführung von Punycode war die Tatsache, dass das etablierte Domain Name System nur aus (englischen) Buchstaben, Ziffern und dem Bindestrich zusammengesetzte Namen akzeptiert. Die meisten Sprachen enthalten aber weitere Zeichen - das Deutsche beispielsweise ä,ö und ü. Um beliebige Texte aus derartigen Sprachen verarbeiten zu können, wurde 2003 das Punycode-Verfahren eingeführt.
Soll ein Text an ein System übergeben werden, das nur ASCII beherrscht, so wird er zuvor per Punycode in ASCII umgesetzt. Zu beachten ist, dass sich in vielen Fällen der resultierende Text verlängert. Soll umgekehrt dieser Text aus dem ASCII-System entnommen werden, so wird er per Punycode in die ursprüngliche Form zurückübersetzt. Enthält ein Text keinerlei Sonderzeichen, so wird er durch dieses Verfahren nicht verändert.
Das Punycode-Konvertierungsverfahren wurde unter Wahrung folgender Gesichtspunkte festgelegt:
-
- Vollständigkeit: Jeder Name kann umgesetzt werden
- Eindeutigkeit: Jedem Namen ist genau eine Umsetzung zugeordnet
- Reversibilität: Jeder umgesetzte Name kann zurückkonvertiert werden
- Effizienz: Der umgesetzte Name ist nicht wesentlich länger als der Ausgangsname
- Einfachheit: Das Verfahren ist relativ einfach zu implementieren
- Lesbarkeit: Der umgesetzte Name bleibt im Wesentlichen lesbar, da die Zeichen A bis Z nicht verändert werden
[Bearbeiten] Regeln der Umwandlung
Als Basiszeichen gelten im folgenden die Buchstaben a bis z und die Ziffern 0 bis 9. Zusammen mit dem Minuszeichen "-" als Trennzeichen stellen diese 36 Zeichen die einzig gültigen Zeichen in einem nach Punycode kodierten Text dar.
Enthält die zu konvertierende Zeichenkette
- nur Basiszeichen, so wird sie nicht verändert, jedoch das Trennzeichen "-" angehängt.
- sowohl Basiszeichen als auch Nicht-Basiszeichen, werden alle Basiszeichen unter Beibehaltung ihrer Reihenfolge aufgeführt und schließlich die kodierten Nicht-Basiszeichen durch "-" getrennt angehängt.
- nur Nicht-Basiszeichen, so ist das Umwandlungsergebnis nur deren Codefolge, ohne Trennzeichen
Beispiele:
Zeichenkette | Codierung |
---|---|
abcdef | abcdef- |
abæcdöef | abcdef-qua4k |
schön | schn-7qa |
ยจฆฟคฏข | 22cdfh1b8fsa |
☺ | 74h |
Um die resultierende Zeichenkette möglichst kompakt zu gestalten, werden die Sonderzeichen nicht "eins-zu-eins" kodiert, sondern nach dem Punycode-Verfahren kodiert. Die Nicht-Basiszeichen werden zuerst nach ihrem Zahlenwert sortiert. Die Differenz zwischen den einzelnen Zeichen wird dann zusammen mit der jeweiligen Position in der ursprünglichen Zeichenkette zur Bildung einer Zahl verwendet. Diese Zahl wird anschließend durch die 36 Basiszeichen dargestellt und an den kodierten Text angehängt. Die Details zu diesem Verfahren sind in RFC 3492 festgelegt, wo auch eine Referenzimplementierung in der Programmiersprache C für die Kodierung und die Dekodierung, sowie zahlreiche Beispiele enthalten sind.
Bei der Bildung von Domainnamen nach dem Internationalizing Domain Names in Applications (IDNA) Standard wird bei Vorhandensein von Nicht-Basiszeichen ein "xn--" Präfix vorangestellt, und andernfalls (nur Basiszeichen) kommt Punycode nicht zur Anwendung.
[Bearbeiten] Browser mit Punycode-Unterstützung
- Firefox
- Internet Explorer ab Version 7
- Internet Explorer Version 5 und 6 nur mittels Zusatzmodulen von Drittanbietern
- Mozilla
- Opera
- Safari
- SeaMonkey ab Version 1.0
[Bearbeiten] Weblinks
- RFC 3492 - Punycode: A Bootstring encoding of Unicode for Internationalized Domain Names in Applications (IDNA)
- Punycode-Konverter Damit lassen sich IDN-Domains in Punycode konvertieren (Nur ein Konverter von vielen)