4.11 stringprep -- Preparazione delle stringhe per Internet

Quando si devono identificare delle cose (come ad esempio i nomi degli host) in Internet, è spesso necessario confrontare queste identificazioni attraverso un meccanismo di ``uguaglianza''. Il modo con cui questo confronto viene effettuato può dipendere dal dominio dell'applicazione, per esempio se deve essere sensibile a maiuscole e minuscole o meno. Può anche risultare necessario restringere il campo delle possibili identificazioni, per consentire le identificazoni composte di soli caratteri ``stampabili''.

La RFC 3454 definisce una procedura per ``preparare'' le stringhe Unicode nei protocolli internet. Prima di inviare le stringhe al cavo, queste vengono elaborate dalla procedura di preparazione, dopo la quale si trovano in una certa forma normalizzata. La RFC definisce un insieme di tabelle, che possono essere combinate in profili. Ogni profilo deve definire quale tabella utilizzare, e quali altre parti facoltative della procedura stringprep devono entrare a far parte del profilo. Un esempio di un profilo di stringprep è nameprep, che viene utilizzata per i nomi di dominio internazionalizzati.

Il modulo stringprep espone solo le tabelle dell'RFC 3454. Poiché queste tabelle sarebbero molto grandi da rappresentare come dizionari o liste, il modulo usa internamente il database dei caratteri Unicode. Lo stesso codice sorgente del modulo viene generato utilizzando l'utility mkstringprep.py.

Come risultato, queste tabelle vengono esposte come funzioni, non come strutture dati. Ci sono due tipi di tabelle nella RFC: insiemi e mappe. Per un insieme, stringprep fornisce la ``funzione caratteristica'', per esempio una funzione che restituisce vero se il parametro è parte dell'insieme. Per le mappe, fornisce la funzione di mappatura: data la chiave, restituisce il valore associato. Di seguito una lista di tutte le funzioni disponibili nel modulo.

in_table_a1( code)
Determina se code è presente nella tabella tableA.1 (Codice non assegnato in Unicode 3.2).

in_table_b1( code)
Determina se code è presente nella tabella tableB.1 (Codice normalmente mappato a nulla).

map_table_b2( code)
Restituisce il valore mappato per code in accordo con la tabella tableB.2 (Mappa per case-folding usata con NFKC).

map_table_b3( code)
Restituisce il valore mappato per code in accordo con la tabella tableB.3 (Mappa per case-folding usata senza normalizzazione).

in_table_c11( code)
Determina se code è presente nella tabella tableC.1.1 (Caratteri di spaziatura ASCII).

in_table_c12( code)
Determina se code è presente nella tabella tableC.1.2 (Caratteri di spaziatura non ASCII).

in_table_c11_c12( code)
Determina se code è presente nella tabella tableC.1 (Caratteri di spaziatura, unione di C.1.1 e C.1.2).

in_table_c21( code)
Determina se code è presente nella tabella tableC.2.1 (Caratteri di controllo ASCII).

in_table_c22( code)
Determina se code è presente nella tabella tableC.2.2 (Caratteri di controllo non ASCII).

in_table_c21_c22( code)
Determina se code è presente nella tabella tableC.2 (Caratteri di controllo, unione di C.2.1 e C.2.2).

in_table_c3( code)
Determina se code è presente nella tabella tableC.3 (Utilizzo privato).

in_table_c4( code)
Determina se code è presente nella tabella tableC.4 (Non-caratteri nel codice punti).

in_table_c5( code)
Determina se code è presente nella tabella tableC.5 (Codici surrogati).

in_table_c6( code)
Determina se code è presente nella tabella tableC.6 (Non appropriati per testo semplice).

in_table_c7( code)
Determina se code è presente nella tabella tableC.7 (Non appropriati per rappresentazioni canoniche).

in_table_c8( code)
Determina se code è presente nella tabella tableC.8 (Cambiano la proprietà di visualizzazione o vengono deprecati).

in_table_c9( code)
Determina se code è presente nella tabella tableC.9 (Caratteri con tag).

in_table_d1( code)
Determina se code è presente nella tabella tableD.1 (Caratteri con proprietà bidirezionali ``R'' o ``AL'').

in_table_d2( code)
Determina se code è presente nella tabella tableD.2 (Caratteri con proprietà bidirezionale ``L'').

Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.