Punycode (wörtlich "Puny Code") ist eine in RFC 3492 definierte Codierungssyntax , die in Verbindung mit internationalisierten Domänennamen in unterstützenden Anwendungen verwendet werden soll.
Der RFC 3492 definiert einen Algorithmus namens Bootstring zur Darstellung einer Zeichenfolge, die aus einem erweiterten Zeichensatz stammt, der von einer Kette gezogen wurde, die einen grundlegenden Zeichensatz (häufig eine sehr kleine Teilmenge von ASCII) gezogen hat. Bootstring ist per Definition:
Punycode ist eine spezielle Anwendung des Bootstring- Algorithmus , der dem internationalisierten Domain-Namen gewidmet ist , bei dem der Basissatz stark reduziert ist (begrenzt auf nur 26 Buchstaben des lateinischen Basisalphabets ohne Unterscheidung der Groß- und Kleinschreibung sowie auf 10 Dezimalstellen und auf die einzige Minuszeichen). Es ermöglicht jedoch die Darstellung von Unicode-Text, obwohl Punycode im Allgemeinen zum Codieren von internationalisierten Labels in Domain-Namen verwendet wird, bei denen zusätzliche Einschränkungen (zusätzlich zu denen der Länge) angewendet werden (insbesondere das Filtern von zulässigen Zeichen und eine Transformation von bestimmte Zeichen oder bestimmte Sequenzen in eine standardisierte Form, bevor sie endgültig mit Punycode dargestellt werden ).
Punycode wandelt eine Unicode-Zeichenfolge auf einzigartige und umkehrbare Weise in eine ASCII-Zeichenfolge um. ASCII-Zeichen in der Unicode-Zeichenfolge werden wörtlich dargestellt, und Nicht-ASCII-Zeichen werden durch ASCII-Zeichen dargestellt, wobei letztere alle in Hostnamenbezeichnungen (Buchstaben, Zahlen und Bindestriche) zulässig sind.
Zum Beispiel wird bücher mit Punycode zu bcher-kva . Als nächstes wird der Domain - Name wird durch dargestellt in IDNA (Standard ermöglicht die Verwendung von internationalisierten Zeichen in Anwendungen). bücher.chxn--bcher-kva.ch
In xn - bcher-kva ist der Punycode der Teil bcher-kva rechts neben dem Präfix, das einen internationalen Namen xn-- angibt . Die gesamte Kette ist ASCII-kompatible Codierung .