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.
label) |
AllowUnassigned
risulta vero.
label) |
UseSTD3ASCIIRules
sia falso.
label) |