bionic (7) utf8.7.gz

Provided by: manpages-it_3.73-2_all bug

NOME

       UTF-8 - una codifica Unicode multi-byte compatibile con ASCII

DESCRIZIONE

       L'insieme di caratteri Unicode 3.0 occupa uno spazio a 16 bit.  La codifica più naturale di Unicode (nota
       come UCS-2 ) consta di sequenze di parole a 16 bit.  Queste  stringhe  possono  contenere—come  parte  di
       molti  caratteri a 16 bit—byte come '\0' o '/', che hanno significato speciale per i nomi di file e per i
       parametri di altre funzioni della libreria C.  Inoltre, la maggioranza degli strumenti  UNIX  si  aspetta
       file in ASCII e non sa leggere parole a 16 bit come caratteri senza grosse modifiche.  Per queste ragioni
       UCS-2 non è una codifica esterna di Unicode adatta a nomi di file, file di testo, variabili d'ambiente, e
       così via.  L'Insieme universale di caratteri ISO 10646 (UCS), un'estensione di Unicode, occupa uno spazio
       ancora maggiore—a 31 bit—e la sua codifica naturale, UCS-4 (una sequenza di  parole  a  32  bit),  soffre
       degli stessi problemi.

       La codifica UTF-8 di Unicode e UCS evita questi problemi, ed è il modo comune con cui Unicode è usato nei
       sistemi operativi tipo UNIX.

   Proprietà
       La codifica UTF-8 possiede queste ottime proprietà:

       * i  caratteri  UCS  da  0x00000000  a  0x0000007f  (i  caratteri  US-ASCII  classici)  sono   codificati
         semplicemente  come  byte  da  0x00  a  0x7f  (compatibilità  ASCII).  In altre parole, file e stringhe
         contenenti solamente caratteri ASCII a 7 bit hanno la stessa codifica sia in ASCII che in UTF-8 .

       * Tutti i caratteri UCS maggiori di 0x7f sono  codificati  come  una  sequenza  a  multibyte  consistente
         esclusivamente  di  byte  nell'intervallo da 0x80 a 0xfd, in modo tale da non trovare nessun byte ASCII
         all'interno di un altro carattere, e da non avere problemi con, tra gli altri, aq\0aq o aq/aq.

       * L'ordinamento lessicografico delle stringhe in UCS-4 viene preservato.

       * Tutti i 2^31 possibili codici UCS possono essere codificati con UTF-8.

       * I byte  0xc0, 0xc1, 0xfe E 0xff non sono mai usati nella codifica UTF-8.

       * Il primo byte di  una  sequenza  multibyte  che  rappresenta  un  carattere  UCS  non  ASCII  è  sempre
         nell'intervallo  da  0xc0  a  0xfd  e  indica la lunghezza della sequenza.  Tutti i byte seguenti nella
         sequenza multibyte sono nell'intervallo da 0x80 a 0xbf, facilitando un'eventuale  risincronizzazione  e
         facendo diventare la codifica senza memoria e resistente a byte mancanti.

       * I  caratteri  UCS  codificati con UTF-8 possono arrivare ai sei byte di lunghezza, tuttavia lo standard
         Unicode non specifica caratteri oltre 0x10ffff, così i caratteri Unicode  possono  essere  lunghi  solo
         fino a quattro byte in UTF-8.

   Codifica
       Le  seguenti sequenze di byte vengono usate per rappresentare un carattere.  La sequenza da usare dipende
       dal numero del codice UCS del carattere:

       0x00000000 - 0x0000007F:
           0xxxxxxx

       0x00000080 - 0x000007FF:
           110xxxxx 10xxxxxx

       0x00000800 - 0x0000FFFF:
           1110xxxx 10xxxxxx 10xxxxxx

       0x00010000 - 0x001FFFFF:
           11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

       0x00200000 - 0x03FFFFFF:
           111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

       0x04000000 - 0x7FFFFFFF:
           1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

       Le configurazioni di bit xxx sono riempite coi bit del  numero  del  codice  carattere  rappresentato  in
       binario.   Viene usata solo la più breve delle sequenze multibyte che possono rappresentare il numero del
       codice.

       I valori del codice UCS 0xd800–0xdfff (surrogati UTF-16), così come 0xfffe e 0xffff  (non-caratteri  UCS)
       non devono apparire nei flussi UTF-8 conformi.

   Esempio
       Il carattere Unicode 0xa9 = 1010 1001 (il simbolo di copyright) si codifica in UTF-8 come

              11000010 10101001 = 0xc2 0xa9

       e il carattere 0x2260 = 0010 0010 0110 0000 (il simbolo "non uguale") si codifica come:

              11100010 10001001 10100000 = 0xe2 0x89 0xa0

   Note sull'applicazione
       Gli utenti devono selezionare una localizzazione UTF-8, ad esempio con

              export LANG=en_GB.UTF-8

       per poter attivare il supporto UTF-8 nelle applicazioni.

       I  software  applicativi  che  devono  riconoscere  la  codica caratteri usata devono sempre impostare la
       localizzazione con, ad esempio,

              setlocale(LC_CTYPE, "")

       e i programmatori possono quindi testare l'espressione

              strcmp(nl_langinfo(CODESET), "UTF-8") == 0

       per determinare se una localizzazione UTF-8 è stata selezionata e se quindi  tutti  gli  input  e  output
       standard in testo, comunicazioni terminale, contenuto in testo dei file, nomi file e variabili d'ambiente
       sono codificati in UTF-8.

       I programmatori abituati alle codifiche a singolo byte come US-ASCII o ISO 8859 devono ricordare che  due
       assunzioni  valide  qui non sono più valide nelle localizzazioni UTF-8.  Innanzitutto un singolo byte non
       corrisponde più necessariamente ad un singolo carattere.  In secondo luogo, poiché i moderni emulatori di
       terminale  in modalità UTF-8 supportano anche caratteri a doppia larghezza cinese, giapponese e coreano e
       i caratteri combinanti, non spaziati, l'emissione di un singolo carattere non avanza  necessariamente  il
       cursore  di  una  posizione come avveniva in ASCII.  Funzioni di libreria come mbsrtowcs(3) e wcswidth(3)
       oggi devono essere usate posizioni di caratteri e cursore.

       La sequenza ufficiale ESC per commutare da uno  schema  di  codifica  ISO  2022  (usato  ad  esempio  dai
       terminali VT100) a UTF-8 è ESC % G ("\x1b%G").  La corrispondente sequenza di ritorno da UTF-8 a ISO 2022
       è ESC % @ ("\x1b%@").  Altre sequenze ISO 2022 (come quelle per commutare gli insiemi G0 e G1)  non  sono
       applicabili in modalità UTF-8.

   Sicurezza
       Gli  standard  Unicode  e  UCS  richiedono  che  i  produttori  di UTF-8 debbano usare la forma più breve
       possibile, ad esempio produrre una sequenza a due byte con primo byte 0xc0 non è conforme.   Unicode  3.1
       ha  aggiunto  la  richiesta  che  i  programmi conformi non debbano accettare le forme non brevi nel loro
       input.  Ciò è per ragioni di sicurezza: se l'input  utente  è  verificato  per  possibili  violazioni  di
       sicurezza,  un programma può verificare solo la versione ASCII di "/../" o ";" o NUL e dimenticare che ci
       sono molti modi non- ASCII di rappresentare queste cose in una codifica UTF-8 non breve.

   Standard
       ISO/IEC 10646-1:2000, Unicode 3.1, RFC 3629, Plan 9.

VEDERE ANCHE

       locale(1), nl_langinfo(3), setlocale(3), charsets(7), unicode(7)

COLOPHON

       Questa pagina fa parte del rilascio 3.73 del progetto Linux man-pages.  Una descrizione del progetto,  le
       istruzioni  per  la  segnalazione  degli  errori,  e  l'ultima  versione  di  questa  pagina  si trova su
       http://www.kernel.org/doc/man-pages/.

       La versione italiana fa parte del pacchetto  man-pages-it  v.  3.73,  a  cura  di:  ILDP  "Italian  Linux
       Documentation Project" http://www.pluto.it/ildp
       Per la traduzione in italiano si può fare riferimento a http://www.pluto.it/ildp/collaborare/
       Segnalare eventuali errori di traduzione a ildp@pluto.it