Scroll to navigation

charsets(7) Miscellaneous Information Manual charsets(7)

NOME

charsets - gli standard degli insiemi di caratteri e internazionalizzazione

DESCRIZIONE

Questa pagina di manuale fa una panoramica sui diversi standard per gli insiemi di caratteri e su come sono stati usati in Linux prima che Unicode diventasse onnipresente. Alcune di queste informazioni sono ancora utili per le persone che lavorano con sistemi e documentazione datati.

Gli standard discussi includono ASCII, GB 2312, ISO/IEC 8859, JIS, KOI8-R, KS e Unicode.

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.

ASCII

ASCII (American Standard Code For Information Interchange) è l'insieme di caratteri originale a 7 bit creato in origine per l'inglese americano; è noto anche come US-ASCII. Viene ora descritto dallo standard ISO/IEC 646:1991 IRV (International Reference Version).

Sono apparse diverse 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 gli insiemi di caratteri non siano veri insiemi di ASCII.

Poiché Unicode, quando si usa UTF-8, è compatibile con ASCII, un testo semplice in formato ASCII viene ugualmente interpretato correttamente sui sistemi moderni che usano UTF-8.

ISO/IEC 8859

ISO/IEC 8859 è una serie di 15 insiemi di caratteri a 8 bit che contengono 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 160–255.

Of these, the most important is ISO/IEC 8859-1 ("Latin Alphabet No. 1" / Latin-1). It was widely adopted and supported by different systems, and is gradually being replaced with Unicode. The ISO/IEC 8859-1 characters are also the first 256 characters of Unicode.

Il supporto di console per gli altri insiemi di carattere ISO/IEC 8859 è disponibile in Linux grazie a utilità in modalità utente (come setfont(8)) che modificano le associazioni di tasti 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 di caratteri:

Latin-1 copre molte delle lingue europee occidentali, come albanese, basco, danese, inglese, faeroese, galiziano, irlandese, islandese, italiano, norvegese, portoghese, spagnolo e svedese. La mancanza delle legature IJ/ij (olandese), œ (francese) e virgolette „vecchio stile“ (tedesco) è ritenuta tollerabile.
Latin-2 supporta molte lingue dell'Europa centrale e orientale a caratteri latini come bosniaco, ceco, croato, polacco, slovacco, sloveno, tedesco e ungherese. Sostituire il rumeno ș/ț con ş/ţ è ritenuto tollerabile.
Latin-3 è stato creato per esperanto, maltese e turco; per il turco è stato poi soppiantato da ISO/IEC 8859-9.
Latin-4 ha introdotto lettere per le lingue nord europee come estone, lettone e lituano, ma è stato soppiantato da ISO/IEC 8859-10 e ISO/IEC 8859-13.
Lettere cirilliche per bulgaro, bellorusso, macedone, russo, serbo e (quasi completamente) ucraino. Non è mai stato usato molto; vedere più avanti la discussione su KOI8-R.
È stato creato per l'arabo. La tabella di glifi ISO/IEC 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.
È stato creato per il greco moderno nel 1987, e aggiornato nel 2003.
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.
Questa è una variante di Latin-1 che sostituisce le lettere islandesi con quelle turche.
Latin-6 ha aggiunto le inuit (groenlandese) e sami (lappone) mancanti in Latin-4, così da coprire l'intera area nordica.
Supporta l'alfabeto thai ed è quasi era identica allo standard TIS-620.
Questo insieme di caratteri non esiste.
Supporta il linguaggio baltico Rim: in particolare, include i caratteri lettoni non inseriti in Latin-4.
Insieme di caratteri celtici, che comprende l'irlandese antico, la lingua dell'isola di Man, il gaelico, il gallese, la lingua della Cornovaglia e il bretone.
Latin-9 è simile al Latin-1 comunemente usato, ma sostituisce alcune simboli meno comuni con il simbolo dell'Euro e alcune lettere francesi e finlandesi assenti in Latin-1.
Questo insieme comprende molte lingue del sud-est europeo, e soprattutto supporta il rumeno in modo più completo del Latin-2.

KOI8-R / KOI8-U

KOI8-R è un insieme di caratteri non ISO molto diffuso in Russia prima dell'Unicode. La metà bassa è ASCII; la metà alta contiene un insieme di caratteri cirillici, concepito un po' meglio di quello di ISO/IEC 8859-5. KOI8-U, basato su KOI8-R, ha un miglior supporto per l'ucraino. Nessuno di questi insiemi è compatibile con ISO/IEC 2022, diversamente dalla serie ISO/IEC 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.

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. EUC-CN è la codifica più importante per Linux e include ASCII e GB 2312. Si noti che EUC-CN spesso è chiamato GB, GB 2312 o CN-GB.

Big5

Big5 era un insieme di caratteri popolare in Taiwan che esprime il cinese tradizionale. (Big5 è sia un insieme di caratteri che una codifica). È un super-insieme di 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 erano largamente usati a Taiwan e Hong Kong. Non è conforme a ISO/IEC 2022.

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/IEC 2022-JP. EUC-JP è la codifica più importante sotto Linux, e include ASCII e JIS X 0208. In JIS X 0208 i caratteri 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/IEC 2022-KR. EUC-KR è la codifica più importante sotto Linux, e include ASCII E KS X 1001. KS C 5601 è il vecchio nome di KS X 1001.

ISO/IEC 2022 e ISO/IEC 4873

Gli standard ISO/IEC 2022 e ISO/IEC 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). Sono state definite diverse codifiche di caratteri basate su ISO/IEC 2002, specialmente per il giapponese.

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 (inizialmente G0), e uno di loro è l'insieme attuale per i codici con bit più alto uno (inizialmente 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 or LS1), ^O (SI or 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/IEC 2375 International Register of Coded Character Sets. Per esempio, ESC ( @ seleziona l'insieme di caratteri ISO/IEC 646 come G0, ESC ( A seleziona l'insieme standard UK (con la sterlina al posto del simbolo numerico), 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, e così via.

A 96-character set is designated as Gn character set by an escape sequence ESC - xx (for G1), ESC . xx (for G2) or ESC / xx (for G3). For example, ESC - G selects the Hebrew alphabet as 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/IEC 4873 stipulates a narrower use of character sets, where G0 is fixed (always ASCII), so that G1, G2, and G3 can be invoked only for codes with the high order bit set. In particular, ^N and ^O are not used anymore, ESC ( xx can be used only with xx=B, and ESC ) xx, ESC * xx, ESC + xx are equivalent to ESC - xx, ESC . xx, ESC / xx, respectively.

TIS-620

TIS-620 è un insieme nazionale di caratteri standard tailandesi, ed è un super-insieme di ASCII. Come le serie ISO/IEC 8859, i caratteri Thai sono mappati in 0xa1–0xfe.

Unicode

Unicode (ISO/IEC 10646) is a standard which aims to unambiguously represent every character in every human language. Unicode's structure permits 20.1 bits to encode every character. Since most computers don't include 20.1-bit integers, Unicode is usually encoded as 32-bit integers internally and either a series of 16-bit integers (UTF-16) (needing two 16-bit integers only when encoding certain rare characters) or a series of 8-bit bytes (UTF-8).

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. Usa 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/IEC 10646 a 31 bit, la progressione continua fino alle codifiche a 6 byte.)

For most texts in ISO/IEC 8859 character sets, this means that the characters outside of ASCII are now coded with two bytes. This tends to expand ordinary text files by only one or two percent. For Russian or Greek texts, this expands ordinary text files by 100%, since text in those languages is mostly outside of ASCII. For Japanese users this means that the 16-bit codes now in common use will take three bytes. While there are algorithmic conversions from some character sets (especially ISO/IEC 8859-1) to Unicode, general conversion requires carrying around conversion tables, which can be quite large for 16-bit codes.

Si noti che UTF-8 è auto sincronizzante: 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 '/'s che formano una parte di un codice più lungo.

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

Rendering of Unicode data streams is typically handled through "subfont" tables which map a subset of Unicode to glyphs. Internally, the kernel uses Unicode to describe the subfont loaded in video RAM. This means that in the Linux console in UTF-8 mode, one can use a character set with 512 different symbols. This is not enough for Japanese, Chinese, and Korean, but it is enough for most other purposes.

VEDERE ANCHE

iconv(1), ascii(7), iso_8859-1(7), unicode(7), utf-8(7)

TRADUZIONE

La traduzione italiana di questa pagina di manuale è stata creata da Ottavio G. Rizzo <rizzo@pluto.linux.it>, Elisabetta Galli <lab@kkk.it>, Marco Curreli <marcocurreli@tiscali.it> e Giuseppe Sacco <eppesuig@debian.org>

Questa traduzione è documentazione libera; leggere la GNU General Public License Versione 3 o successiva per le condizioni di copyright. Non ci assumiamo alcuna responsabilità.

Per segnalare errori nella traduzione di questa pagina di manuale inviare un messaggio a pluto-ildp@lists.pluto.it.

21 settembre 2025 Linux man-pages 6.16