Punycode è stato definito dall’IETF nel RFC 3492 come possibilità di utilizzo di un algoritmo generale di codifica indicato come bootstring. L’algoritmo bootstring consente sequenze di caratteri di set di caratteri qualsiasi con una selezione limitata di elementi univoci. Alla base dello sviluppo di questo sistema di codifica si trovano sei principi:
- Completezza: ogni catena di caratteri di partenza si può rappresentare tramite bootstring su una catena di caratteri semplificata.
- Univocità: l’assegnazione della catena di caratteri di partenza alla rispettiva codifica bootstring è univoca. A ogni Punycode può essere assegnato esattamente un corrispondente ASCII e viceversa.
- Reversibilità: la codifica tramite bootstring si può annullare in qualsiasi momento senza perdita di informazioni.
- Efficienza: la catena di caratteri codificata è, se presente, solo leggermente più lunga rispetto alla catena di caratteri di partenza.
- Semplicità: bootstring ricorre ad algoritmi semplici di codifica e di decodifica.
- Leggibilità: vengono codificati solo caratteri che non si possono presentare nei set di caratteri di destinazione. Tutti gli altri caratteri restano invariati.
Punycode specifica bootstring in conformità ai requisiti dei nomi di dominio internazionalizzati. Ciò dovrebbe consentire i caratteri Unicode attraverso i caratteri di base ammessi finora.
Vi spieghiamo la codifica con l’esempio seguente.
IDN: müller-büromöbel
L’IDN müller-büromöbel comprende due caratteri con ü e ö, che non sono contenuti nel set di caratteri ammessi finora per i nomi di dominio e perciò devono essere codificati per il rispetto della compatibilità tramite Punycode.
Il procedimento di codifica prevede nel primo passaggio una normalizzazione della catena dei caratteri di partenza. Tutte le lettere maiuscole vengono sostituite con le corrispondenti lettere minuscole. Altri caratteri come la “ß“ vengono convertiti in caratteri singoli (ss).
Nel secondo passaggio, tutti i caratteri non di base vengono eliminati e aggiunti poi al nome di dominio in forma codificata e separati da un trattino.
Se il sistema Punycode viene utilizzato per la codifica degli indirizzi Internet, ogni stringa di risultato presenta un cosiddetto prefisso ACE (abbreviato in ASCII Compatible Encoding = codifica compatibile ASCII):
Prefisso ACE:xn--
Il prefisso ACE garantisce che i nomi di dominio che contengono trattini non vengano erroneamente interpretati come nomi di dominio internazionali.
Per l’IDN müller-büromöbel risulta la seguente codifica:
ACE: xn--mller-brombel-rmb4fg