Provided by: manpages-it_2.80-3_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/