Provided by: manpages-it_2.80-5_all bug

NOME

       charsets - visione del programmatore degli insiemi di caratteri e dell'internazionalizzazione

DESCRIZIONE

       Linux è un sistema operativo internazionale. Molte delle sue utilità e driver dei dispositivi (incluso il
       driver  della  console)  supportano  insiemi  di  caratteri multilingue, incluse le lettere dell'alfabeto
       latino con segni diacritici, accenti, logotipi e  interi  alfabeti  non  latini  compresi  quello  greco,
       cirillico, arabo ed ebraico.

       Questa  pagina  di  manuale  presenta  il punto di vista di un programmatore sui diversi standard per gli
       insiemi di caratteri e su come interagiscono in Linux. Gli standard discussi includono ASCII,  ISO  8859,
       KOI8-R,  Unicode,  ISO  2022  e  ISO  4873.  Verrà  data  maggiore  importanza  agli insiemi di caratteri
       effettivamente usati come insiemi di caratteri di localizzazione, non  sulla  miriade  di  altri  insiemi
       presenti nei dati in altri sistemi.

       L'elenco  completo  di  insiemi  di  caratteri  usati  da  glibc  2.2.3  in una localizzazione supportata
       ufficialmente è: ISO-8859-{1,2,3,5,6,7,8,9,13,15}, CP1251,  UTF-8,  EUC-{KR,JP,TW},  KOI8-{R,U},  GB2312,
       GB18030,  GBK, BIG5, BIG5-HKSCS and TIS-620 (in nessun ordine particolare). (Il rumeno potrebbe passare a
       ISO-8859-16).

ASCII

       ASCII (American Standard Code For Information Interchange) è l'insieme di caratteri originale  a  7  bit,
       creato in origine per l'inglese americano. Viene ora descritto dallo standard ECMA-6.

       Esistono  alcune varianti ASCII che sostituiscono il simbolo del dollaro con i simboli di altre valute, e
       la punteggiatura con caratteri alfabetici non inglesi per includere altri caratteri  a  7  bit  tedeschi,
       francesi,  spagnoli  ed  altri.  Sono tutte deprecate, in quanto glibc non supporta localizzazioni in cui
       insiemi di caratteri non siano veri insiemi di ASCII (questi insiemi sono noti come ISO-646,  un  parente
       prossimo di ASCII che permette la sostituzione di questi caratteri).

       Essendo Linux stato scritto per hardware progettato negli USA, supporta ASCII nativamente.

ISO 8859

       ISO  8859 è una serie di 15 insiemi di caratteri a 8 bit che contengono US ASCII nella metà bassa (quella
       a 7 bit), caratteri invisibili di controllo nelle posizioni da 128 a 159 e 96 grafici a  larghezza  fissa
       nelle posizioni da 160 a 255.

       Di  questi,  il  più importante è ISO 8859-1 (Latin-1). È supportato nativamente dal driver di console di
       Linux, abbastanza bene da X11R6, ed è l'insieme base di caratteri di HTML.

       Il supporto di console per gli altri insiemi di carattere 8859 è disponibile in Linux grazie a utilità in
       modo utente (come setfont(8)) che modificano le associazioni di tastiera e  la  tabella  grafica  EGA,  e
       impiegano una "mappa utente" per la tabella di caratteri nel driver di console.

       Ecco una breve descrizione di ciascun insieme:

       8859-1 (Latin-1)
              Latin-1  copre la maggior parte delle lingue europee occidentali, come albanese, catalano, danese,
              olandese, inglese, lingua delle isole Faroer, finlandese, francese, tedesco, galiziano, irlandese,
              islandese, italiano, norvegese, portoghese, spagnolo  e  svedese.  La  mancanza  dei  logotipi  ij
              (olandese), oe (francese) e virgolette "vecchio stile" (tedesco) è tollerabile.

       8859-2 (Latin-2)
              Latin-2  supporta  molte  lingue slave e centro-europee a caratteri latini: ceco, croato, polacco,
              rumeno, slovacco, sloveno, tedesco e ungherese.

       8859-3 (Latin-3)
              Latin-3 è popolare tra gli autori di esperanto, galiziano e maltese (il turco invece ora si scrive
              con 8859-9).

       8859-4 (Latin-4)
              Latin-4 introduce lettere per estone, lettone e lituano. È essenzialmente obsoleto; vedere 8859-10
              (Latin-6) e 8859-13 (Latin-7).

       8859-5 Lettere cirilliche per bulgaro, bellorusso, macedone, russo, serbo e ucraino. Gli ucraini  leggono
              la  lettera  `ghe' con trattino in basso come `heh' e avrebbero bisogno di una ghe con trattino in
              alto per scrivere la ghe corretta. Vedere più sotto la discussione su KOI8-R.

       8859-6 Supporta l'arabico. La tabella di glifi 8859-6 contiene un insieme di caratteri fissi con  lettere
              distinte, ma un appropriato motore di visualizzazione dovrebbe combinarli usando le corrette forme
              iniziali, mediane e finali.

       8859-7 Supporta il greco moderno.

       8859-8 Supporta  l'ebraico  moderno  senza  niqud  (segni di punteggiatura). Niqud e lo sviluppo completo
              dell'ebraico della Bibbia vanno al di là degli scopi di questo insieme di caratteri: in Linux,  la
              codifica favorita per questi caratteri è UTF-8.

       8859-9 (Latin-5)
              Questa è una variante di Latin-1 che sostituisce le lettere islandesi con quelle turche.

       8859-10 (Latin-6)
              Latin 6 aggiunge le ultime lettere inuit (groenlandese) e sami (lappone) mancanti in Latin-4, così
              da  coprire  l'intera  area  nordica. RFC 1345 elencava una versione preliminare, e differente, di
              `latin6'. Il sami skolt ha ancora bisogno di alcuni ulteriori accenti.

       8859-11
              Esiste solo come bozza standard rifiutata. La bozza era identica a TIS-620, che veniva usato sotto
              Linux per il Thai.

       8859-12
              Questo insieme non esiste. Qualcuno ha suggerito il vietnamita per  questo  spazio,  ma  esso  non
              rientra  nei  96  caratteri  ISO (non combinati) offerti da 8859. L'insieme di caratteri preferito
              usato sotto Linux per il vietnamita è UTF-8.

       8859-13 (Latin-7)
              Supporta il linguaggio baltico Rim: in particolare, include i caratteri lettoni  non  inseriti  in
              Latin-4.

       8859-14 (Latin-8)
              Insieme  di  caratteri  celtico,  che  comprende  gaelico  e  gallese.  Contiene anche i caratteri
              punteggiati usati nel vecchio irlandese.

       8859-15
              Aggiunge il segno dell'Euro e alcune lettere francesi e finlandesi assenti in Latin-1.

       8859-16 (Latin-10)
              Questo insieme comprende molte lingue inserite in  8859-2,  e  supporta  il  rumeno  in  modo  più
              completo.

   KOI8-R
       KOI8-R  è un insieme di caratteri non ISO molto diffuso in Russia. La metà bassa è US ASCII; la metà alta
       contiene un insieme di caratteri cirillici, concepito vagamente meglio di quello di ISO 8859-5. KOI8-U  è
       un  comune insieme di caratteri basato su KOI8-R, che contiene un miglior supporto per l'ucraino. Nessuno
       di questi insiemi è compatibile con ISO-2022, diversamente dalla serie ISO-8859.

       Il supporto di console per KOI8-R è disponibile in Linux grazie a utilità in modo utente  che  modificano
       le  associazioni  di  tastiera e la tabella grafica EGA, e impiegano una "mappa utente" per la tabella di
       caratteri nel driver di console.

   JIS X 0208
       JIS X 0208 è un insieme nazionale di caratteri standard giapponesi. Anche se ci sono alcuni altri insiemi
       di caratteri standard in Giappone (come JIS X 0201, JIS X 0212 e JIS X 0213), questo è il più importante.
       I caratteri vengono mappati in una matrice 94x94 a due byte,  e  ogni  byte  è  compreso  nell'intervallo
       0x21-0x7e. Si noti che JIS X 0208 è un insieme di caratteri, non una codifica: questo significa che JIS X
       0208 non può essere usato per indicare dati di testo. Si usa come componente per costruire codifiche come
       EUC-JP,  Shift_JIS  e  ISO-2022.JP. EUC-JP è la codifica più importante sotto Linux, e include US ASCII e
       JIS X 0208. In questa codifica i caratteri JIS X 0208 vengono espressi in due byte, ognuno dei quali è il
       codice JIS X 0208 più 0x80.

   KS X 1001
       KS X 1001 è un insieme nazionale di caratteri standard coreani. Proprio come  JIS  X  0208,  i  caratteri
       vengono  mappati  in  una matrice 94x94 a due byte. KS X 1001 si usa come JIS X 0208, come componente per
       costruire codifiche come EUC-KR, Johab e ISO-2022-KR. EUC-KR è la codifica più importante sotto Linux,  e
       include US ASCII E KS X 1001. KS C 5601 è il vecchio nome di KS X 1001.

   GB 2312
       GB  2312  è un insieme nazionale di caratteri standard cinesi di terraferma usato per esprimere il cinese
       semplificato. Proprio come JIS X 0208, i caratteri vengono mappati in una matrice 94x94 a due byte  usata
       per costruire EUC-CN: essa è la codifica più importante sotto Linux e include US ASCII E GB 2312. Si noti
       che EUC-CN spesso è chiamato GB, GB 2312 o CN-GB.

   Big5
       Big5  è  un  insieme  di  caratteri popolare in Taiwan che esprime il cinese tradizionale. (Big5 è sia un
       insieme di caratteri che una codifica). È un superset di US ASCII. I caratteri non ASCII vengono espressi
       in due byte. I byte 0xa1-0xfe vengono usati come byte iniziali per i caratteri a due byte. Big5 e la  sua
       estensione sono largamente usati a Taiwan e Hong Kong. Non è conforme a ISO 2022.

   TIS 620
       TIS  620  è  un insieme nazionale di caratteri standard tailandesi, ed è un superset di US ASCII. Come le
       serie ISO 8859, i caratteri Thai sono mappati in 0xa1-0xfe.  TIS  620  è  l'unico  insieme  di  caratteri
       comunemente usato sotto Linux oltre a UTF-8 per ottenere combinazioni di caratteri.

   UNICODE
       Unicode  (ISO  10646)  è uno standard il cui scopo è rappresentare senza ambiguità ogni carattere di ogni
       lingua umana. La struttura di Unicode permette 20.1 bit per  codificare  qualunque  carattere.  Dato  che
       molti  computer non includono interi a 20.1 bit, Unicode solitamente è internamente codificato con interi
       a 32 bit e con una serie di interi a 16 bit (UTF-16, che ha bisogno di due interi a 16  bit  solo  quando
       codifica  alcuni  rari  caratteri)  o con una serie di byte a 8 bit (UTF-8). Informazioni su Unicode sono
       disponibili a <http://www.unicode.org>.

       Linux rappresenta Unicode tramite il "Formato di trasferimento Unicode" (Unicode Transfer Format) a 8 bit
       (UTF-8). UTF-8 è una codifica di Unicode a lunghezza variabile. Utilizza 1 byte per codificare 7  bit,  2
       byte per 11 bit, 3 byte per 16 bit, 4 byte per 21 bit, 5 byte per 26 bit e 6 byte per 31 bit.

       Poniamo  che 0,1,x sia uno zero, uno o un bit arbitrario. Un byte 0xxxxxxx rappresenta l'Unicode 00000000
       0xxxxxxx, che codifica lo stesso simbolo dell'ASCII 0xxxxxxx. Perciò, ASCII rimane invariato in  UTF-8  e
       coloro che usano solo ASCII non notano nessuna differenza: né nel codice, né nella dimensione del file.

       Un byte 110xxxxx è l'inizio di una codifica a due byte, dove 110xxxxx 10yyyyyy sta per 00000xxx xxyyyyyy.
       Un  byte 1110xxxx è l'inizio di una codifica a tre byte, dove 1110xxxx 10yyyyyy 10zzzzzz sta per xxxxyyyy
       yyzzzzzz. (Se si usa UTF-8 per codificare l'ISO 10646 a  31  bit,  la  progressione  continua  fino  alle
       codifiche a 6 byte.)

       Per  gli  utilizzatori  degli insiemi di caratteri ISO-8859, questo significa che i caratteri al di fuori
       dell'ASCII sono ora codificati con due byte. Ciò tende ad espandere un file ordinario di testo dell'uno o
       due per cento. Per utilizzatori russi o greci, espande file ordinari di testo del 100%, dato che il testo
       in queste lingue è quasi tutto al di fuori dell'ASCII. Per gli utilizzatori giapponesi significa  che  la
       codifica  a  16  bit  oggi comunemente usata userà tre byte. Anche se ci sono algoritmi di conversione da
       alcuni insiemi di caratteri (specialmente ISO-8859-1) a Unicode, conversioni generali richiedono l'uso di
       tabelle di conversione, che possono essere piuttosto grandi per codifiche a 16 bit.

       Si noti che UTF-8 è autosincronizzante: 10xxxxxx è una coda, e qualsiasi altro byte  è  la  testa  di  un
       codice. Si noti anche che l'unico modo in cui un byte ASCII può comparire in una sequenza UTF-8 è come se
       stesso.  In  particolare,  non ci sono byte NULL ('\0') inseriti o '/' che formano una parte di un codice
       più lungo.

       Poiché ASCII e, in particolare, NUL e '/' sono invariati, il kernel non si rende conto  dell'utilizzo  di
       UTF-8. Non gli interessa il significato dei byte di cui si occupa.

       Le  sequenze  di  dati  Unicode  sono  solitamente  rese attraverso tabelle che associano sottoinsiemi di
       Unicode a glifi. Internamente, il kernel usa Unicode per descrivere il sottoinsieme di caratteri caricato
       nella RAM video. Ciò significa che in modo UTF-8 si può usare  un  insieme  di  caratteri  con  soli  512
       simboli diversi. Questo non è sufficiente per giapponese, cinese e coreano, ma basta per la maggior parte
       degli altri utilizzi.

       Attualmente  il driver di console non si occupa delle combinazioni di caratteri. Dunque il tailandese, il
       sioux e qualunque altro script che abbia bisogno di combinazioni di  caratteri  non  può  essere  gestito
       dalla console.

   ISO 2022 e ISO 4873
       Gli  standard ISO 2022 e 4873 descrivono un modello di controllo dei caratteri basato sugli usi di VT100.
       Questo modello è (parzialmente) supportato dal kernel di Linux e da xterm(1). È popolare  in  Giappone  e
       Corea.

       Ci  sono  quattro  insiemi  di  caratteri  grafici,  chiamati G0, G1, G2 e G3: uno di loro è l'insieme di
       caratteri attuale per i codici con bit più alto zero (all'inizio G0), e uno di loro è  l'insieme  attuale
       per  i  codici  con  bit  più  alto  uno (all'inizio G1). Ciascun insieme di caratteri grafici ha 94 o 96
       caratteri ed è essenzialmente un insieme a sette bit. Usa i codici 040-0177 (041-0176)  oppure  0240-0377
       (0241-0376). G0 ha sempre 94 elementi e usa i codici 041-0176.

       Si  passa da un insieme all'altro attraverso le funzioni di cambiamento ^N (SO o LS1), ^O (SI o LS0), ESC
       n (LS2), ESC o (LS3), ESC N (SS2), ESC O (SS3), ESC ~ (LS1R), ESC } (LS2R), ESC | (LS3R). La funzione LSn
       fa sì che l'insieme Gn sia quello attuale per codici con bit più alto zero. La funzione LSnR  fa  sì  che
       l'insieme  Gn  sia quello attuale per codici con bit più alto uno. La funzione SSn fa sì che l'insieme Gn
       (n=2 o 3) sia quello attuale per il solo carattere successivo (qualsiasi sia il valore del  suo  bit  più
       alto).

       Un  insieme  da  94 caratteri viene denotato come insieme Gn da una sequenza di escape ESC ( xx (per G0),
       ESC ) xx (per G1), ESC * xx (per G2), ESC + xx (per G3), dove xx è un simbolo o  una  coppia  di  simboli
       trovati  in  ISO  2375  International  Register  of Coded Character Sets. Per esempio,  ESC ( @ seleziona
       l'insieme di caratteri ISO 646 come G0, ESC ( A seleziona l'insieme standard inglese (con la sterlina  al
       posto  del  cancelletto), ESC ( B seleziona l'ASCII (col dollaro al posto del simbolo monetario), ESC ( M
       seleziona un insieme di caratteri per le lingue africane, ESC ( ! A seleziona l'insieme cubano, ecc. ecc.

       Un insieme da 96 caratteri viene denotato come l'insieme Gn da una sequenza di escape ESC - xx (per  G1),
       ESC . xx (per G2), o ESC / xx (per G3). Per esempio, ESC - G seleziona l'alfabeto ebraico come G1.

       Un  insieme multibyte viene denotato come insieme Gn da una sequenza di escape ESC $ xx o ESC $ ( xx (per
       G0), ESC $ ) xx (per G1), ESC $ * xx (per G2), ESC $ + xx (per G3). Per esempio,  ESC  $  (  C  seleziona
       l'insieme  di  caratteri coreano come G0. L'insieme giapponese selezionato da ESC $ B ha una versione più
       recente selezionata da ESC & @ ESC $ B.

       ISO 4873 stabilisce un uso più restrittivo degli insiemi, in cui G0 è fisso (sempre  ASCII),  facendo  sì
       che  G1,  G2  e  G3  possano  essere  invocati  solo  per  codici  in cui il bit più alto è impostato. In
       particolare, ^N e ^O non vengono più usati, ESC ( xx può essere usato solo con xx=B, e ESC )  xx,  ESC  *
       xx, ESC + xx sono equivalenti, rispettivamente, a ESC - xx, ESC . xx, ESC / xx.

VEDERE ANCHE

       console(4), console_codes(4), console_ioctl(4), ascii(7), iso_8859_1(7), unicode(7), utf-8(7)

COLOPHON

       Questa  pagina fa parte del rilascio 2.80 del progetto man-pages di Linux. Si può trovare una descrizione
       del progetto, e informazioni su come riportare bachi, presso http://www.kernel.org/doc/man-pages/. Per la
       traduzione in italiano si può fare riferimento a http://www.pluto.it/ildp/collaborare/

Linux                                             3 giugno 2008                                      CHARSETS(7)