Provided by: manpages-it_0.3.4-5_all bug

NOME

       charsets  -  il  punto  di  vista  del  programmatore  sugli insiemi di
       caratteri e sull’internazionalizzazione

DESCRIZIONE

       Linux è un sistema operativo internazionale. Molte delle sue utilità  e
       device  driver  (incluso  il  driver  di console) supportano insiemi di
       caratteri multilinguistici, come le lettere  dell’alfabeto  latino  con
       segni  diacritici,  accenti,  logotipi (ligature, in inglese), e interi
       alfabeti non  latini  compresi  quello  greco,  cirillico,  arabico  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.

ASCII

       ASCII  (American  standard  code  for  information:   Codice   standard
       americano  per  l’informazione)  è l’insieme di caratteri originale a 7
       bit, creato in origine per l’inglese  americano.  Viene  ora  descritto
       dallo standard ECMA-6.

       Una  variante  di  ASCII che sostituisce il cancelletto «#» col simbolo
       della sterlina inglese è usata in  Gran  Bretagna;  se  necessario,  le
       varianti  americane  e  britanniche  possono  essere  distinte come «US
       ASCII» e «UK ASCII».

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

ISO 8859

       ISO  8859  è  una  serie  di  dieci  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 novantasei
       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  ISO  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, faroese, finlandese, francese,
              galiziano, inglese, irlandese, islandese,  italiano,  norvegese,
              olandese,  portoghese,  spagnolo, svedese e tedesco. La mancanza
              dei logotipi oe (francese), ij (olandese) 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  con  gli  autori  di  esperanto,  galiziano,
              maltese e turco.

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

       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 giusta. Vedi anche oltre la
              discussione su KOI8-R.

       8859-6 Supporta l’arabico. La  tabella  8859-6  di  glifi  contiene  un
              insieme  di  caratteri  con  lettere  distinte,  ma il motore di
              visualizzazione (display engine) dovrebbe combinarli  usando  le
              appropriate forme iniziali, mediane e finali.

       8859-7 Supporta il greco moderno.

       8859-8 Supporta l’ebraico.

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

       8859-10 (Latin-6)
              Latin  6  aggiunge  le  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. Il sami skolt abbisogna di alcuni ulteriori accenti.

       8859-13 (Latin-7)

       8859-14 (Latin-8)

       8859-15
              Questo aggiunge il segno dell’Euro e  alcuni  logotipi  francesi
              assenti in Latin-1.

KOI8-R

       KOI8-R è un insieme di caratteri non ISO ma 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.

       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.

UNICODE

       Unicode (ISO 10646) è uno standard il cui scopo è  rappresentare  senza
       ambiguità  ogni  glifo  di  ogni  lingua  umana.  La codifica innata di
       Unicode è a 32 bit (versioni precedenti usavano 16  bit).  Informazioni
       su Unicode sono disponibili a <http://www.unicode.com>.

       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 un byte per codificare 7 bit,
       due byte per 11 bit, tre byte per 16 bit, quattro per  21  bit,  cinque
       per 26 e sei per 31.

       Scriviamo  0,1,x  per  un  bit zero, uno o 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 31 bit.

       Per gli utilizzatori di ISO-8859-1, questo significa che i caratteri in
       cui il bit più alto è impostato hanno ora  bisogno  di  due  byte.  Ciò
       tende ad espandere un file ordinario di testo dell’uno o due per cento.
       Non ci sono problemi di conversione, però, avendo i simboli  ISO-8859-1
       lo  stesso  valore in Unicode (estesi da otto bit nulli in fronte). Per
       gli  utenti  giapponesi,  questo  significa  che  i  codici  a  16  bit
       comunemente  usati  hanno  bisogno  di tre byte e che grosse tabelle di
       traduzione sono necessarie: di  conseguenza,  molti  utenti  giapponesi
       preferiscono ISO 2022.

       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 NULli 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 gl’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 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 o coreano, ma basta per la maggior parte degli altri utilizzi.

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).   È  molto  popolare  in
       Giappone e Corea.

       Ci sono quattro insiemi di caratteri grafici, chiamati G0, G1, G2 e G3:
       uno di loro è l’insieme corrente per i codici con  bit  più  alto  zero
       (all’inizio  G0),  e  uno di loro è l’insieme corrente 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
       di stato ^N (SO oppure LS1), ^O (SI oppure 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 corrente  per
       codici  con bit più alto zero.  La funzione LSnR fa sì che l’insieme Gn
       sia quello corrente per codici con bit più alto uno.  La  funzione  SSn
       fa  sì  che l’insieme Gn (n=2 oppure 3) sia quello corrente per il solo
       carattere successivo (qualsiasi sia il valore del suo bit più alto).

       Un insieme da 94 caratteri viene denotato  come  l’insieme  Gn  da  una
       sequenza 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 britannico (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  ESC  - xx (per G1), ESC . xx (per G2), ESC / xx (per G3). Per
       esempio, ESC - G seleziona l’alfabeto ebraico come G1.

       Un insieme multi-byte viene denotato come l’insieme Gn da una  sequenza
       ESC  $  xx  oppure 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 è
       fissato (sempre ASCII), facendo sì che  G1,  G2  e  G3  possano  essere
       invocati 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_ioctl(4),      console_codes(4),      ascii(7),
       iso_8859_1(7), unicode(7), utf-8(7)