4.9.3 encodings.idna -- Nomi di Dominio Internazionalizzati in Applicazioni (IDNA)

Nuovo nella versione 2.3.

Questo modulo implementa la RFC 3490 (Nomi di Dominio Internazionalizzati nelle Applicazioni) e la RFC 3492 (Nameprep: un Profilo Stringprep per Nomi di Dominio Internazionalizzati (IDN). Costruisce sopra la codifica punycode e su stringprep.

Queste RFC, insieme definiscono un protocollo per il supporto dei caratteri non ASCII nei nomi di dominio. Un nome di dominio contenente caratteri non ASCII (come ``www.Alliancefrançaise.nu'') viene convertito in una codifica compatibile con ASCII(ACE, come ``www.xn-alliancefranaise-npb.nu''). La forma ACE del nome di dominio viene poi usata in tutti i luoghi in cui i caratteri arbitrari non sono consentiti dal protocollo, come richieste DNS, campi Host: HTTP, e così via. La conversione viene effettuata dall'applicazione, se possibile in modo non visibile all'utente: l'applicazione dovrebbe convertire in modo trasparente le etichette di dominio Unicode a IDNA al volo, e riconvertire le etichette ACE a Unicode prima di visualizzarle all'utente.

Python supporta questa conversione in diversi modi: il codec idna permette la conversione tra Unicode e ACE. Inoltre, il modulo socket converte in modo trasparente nomi di host Unicode a ACE, cosicché le applicazioni non hanno bisogno di venire informate circa la conversione dei nomi di host, quando questi vengono passati al modulo socket. Sopra tutto questo, i moduli che possiedono nomi di host come parametri di funzioni, come httplib e ftplib, accettano nomi di host Unicode (httplib invia inontre in modo trasparente un nome di host IDNA nel campo Host:, se invia quel campo a tutti).

Quando si ricevono nomi di host dall'esterno (come in una ricerca di risoluzione inversa) non viene effettuata nessuna conversione automatica verso Unicode: le Applicazioni che desiderano presentare all'utente qualche nome di host, dovrebbero decodificarle dall'Unicode.

Il modulo encodings.idna implementa anche la procedura nameprep, che esegue alcune normalizzazioni sui nomi degli host, per poter presentare i dati come non sensibili alle differenze tra maiuscolo e minuscolo dei Nomi di Dominio Internazionali, e per unificare i caratteri simili. La funzione nameprep può venire utilizzata direttamente, se lo si desidera.

nameprep( label)
Restituisce la versione nameprep di label. L'implementazione gestisce attualmente stringhe di richiesta, così AllowUnassigned risulta vero.

ToASCII( label)
Converte un'etichetta in ASCII, come specificato nella RFC 3490. Si assume che UseSTD3ASCIIRules sia falso.

ToUnicode( label)
Converte un'etichetta in Unicode, come specificato nella RFC 3490.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.