Vai al contenuto

Punycode

Da Wikipedia, l'enciclopedia libera.

Punycode è un sistema di codifica definito nella RFC 3492 che serve a rappresentare univocamente una sequenza di caratteri unicode tramite una sequenza di caratteri ASCII, per rendere possibile l'uso di tali sequenze nei nomi di dominio, senza dover modificare infrastrutture e standard esistenti. In questo modo si possono gestire nomi di dominio internazionali (IDNA).

La traduzione di sequenze Punycode nella codifica originaria è a carico dell'user agent.

Algoritmo di base

L'algoritmo non è semplicissimo, tuttavia può essere ricondotto a operazioni di base elementari, oltre ad essere facilmente implementabile e versatile. Gli elementi principali sono i seguenti:

  • Le sequenze Punycode iniziano con i caratteri "xn--".
  • Dopo tale marchio vengono inseriti, così come compaiono, i caratteri ascii standard.
  • Tali caratteri sono seguiti da un trattino e da una serie di caratteri alfanumerici che rappresentano la trascodifica vera e propria dei simboli unicode non ASCII in punycode.

Un esempio può essere dato da totò trascodificato in xn--tot-ena.

Per capire il cuore dell'algoritmo dovremo soffermarci sul terzo punto. La sequenza alfanumerica dopo quel trattino solitario in realtà rappresenta uno o più numeri, chiamati delta, ognuno associato alla presenza di un carattere unicode all'interno della stringa. Ovviamente nel caso in questione la stringa ena rappresenta la presenza della ò in 4° posizione, ma a causa dell'algoritmo usato (in cui entrano in gioco la lunghezza della stringa, i caratteri già inseriti, e altri parametri) potrebbe significare anche un altro codice unicode in un'altra posizione!

Soffermandoci adesso sul singolo delta, esso:

  • Rappresenta un numero in notazione 36esimale (lettere a-z e numeri 0-9) con talune particolarità. a-z (minuscole o maiuscole) valgono rispettivamente 0-25 e 0-9 valgono 26-35.
  • Vi sono alcuni caratteri che, oltre ad avere un proprio valore numerico, segnano allo stesso tempo la fine del delta (e l'eventuale inizio di un altro); il numero di tali caratteri-marcatori varia durante l'algoritmo. La presenza di tali caratteri si riflette nel motivo per cui il peso di una data cifra non sarà data semplicemente dalla formula base^n, ma a volte alla base occorre sottrare i cosiddetti thresholds, ovverosia il numero di possibili marcatori di fine delta.
  • Il numero è little endian, ovverosia con la cifra meno significativa a sinistra.

Voci correlate