charsets - gli standard degli insiemi di caratteri e internazionalizzazione
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 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 (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
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 8859 is a series of 15 8-bit character sets, all of which have ASCII in
their low (7-bit) half, invisible control characters in positions 128 to 159,
and 96 fixed-width graphics in positions 160–255.
Of these, the most important is ISO 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 8859-1 characters are also the
first 256 characters of Unicode.
Il supporto di console per gli altri insiemi di carattere 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.
Here are brief descriptions of each character set:
- 8859-1 (Latin-1)
- Latin-1 covers many European languages such as Albanian,
Basque, Danish, English, Faroese, Galician, Icelandic, Irish, Italian,
Norwegian, Portuguese, Spanish, and Swedish. The lack of the ligatures
Dutch IJ/ij, French œ, and old-style
„German“ quotation marks was considered tolerable.
- 8859-2 (Latin-2)
- Latin-2 supports many Latin-written Central and East
European languages such as Bosnian, Croatian, Czech, German, Hungarian,
Polish, Slovak, and Slovene. Replacing Romanian ș/ț with
ş/ţ was considered tolerable.
- 8859-3 (Latin-3)
- Latin-3 è stato creato per esperanto, maltese e
turco; per il turco è stato poi soppiantato da 8859-9.
- 8859-4 (Latin-4)
- Latin-4 ha introducotto lettere per le lingue
nord-occidentali come estone, lettone e lituano, ma è stato
soppiantato da 8859-10 e 8859-13.
- 8859-5
- 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.
- 8859-6
- È stato creato per l'arabo. 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
- È stato creato per il greco moderno nel 1987, e
aggiornato nel 2003.
- 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.
- 8859-9 (Latin-5)
- Questa è una variante di Latin-1 che sostituisce le
lettere islandesi con quelle turche.
- 8859-10 (Latin-6)
- Latin-6 ha aggiunto le inuit (groenlandese) e sami
(lappone) mancanti in Latin-4, così da coprire l'intera area
nordica.
- 8859-11
- Supporta l'alfabeto thai ed è quasi era identica
allo standard TIS-620.
- 8859-12
- This character set does not exist.
- 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 celtici, che comprende l'irlandese
antico, la lingua dell'isola di Man, il gaelico, il gallese, la lingua
della Cornovaglia e il bretone.
- 8859-15 (Latin-9)
- 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.
- 8859-16 (Latin-10)
- This character set covers many Southeast European
languages, and most importantly supports Romanian more completely than
Latin-2.
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 8859-5. KOI8-U, basato su KOI8-R, ha 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.
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 was a popular character set in Taiwan to express traditional Chinese. (Big5
is both a character set and an encoding.) It is a superset of ASCII. Non-ASCII
characters are expressed in two bytes. Bytes 0xa1–0xfe are used as
leading bytes for two-byte characters. Big5 and its extension were widely used
in Taiwan and Hong Kong. It is not ISO 2022 compliant.
JIS X 0208 is a Japanese national standard character set. Though there are some
more Japanese national standard character sets (like JIS X 0201, JIS X 0212,
and JIS X 0213), this is the most important one. Characters are mapped into a
94x94 two-byte matrix, whose each byte is in the range 0x21–0x7e. Note
that JIS X 0208 is a character set, not an encoding. This means that JIS X
0208 itself is not used for expressing text data. JIS X 0208 is used as a
component to construct encodings such as EUC-JP, Shift_JIS, and ISO-2022-JP.
EUC-JP is the most important encoding for Linux and includes ASCII and JIS X
0208. In EUC-JP, JIS X 0208 characters are expressed in two bytes, each of
which is the JIS X 0208 code plus 0x80.
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 ASCII E KS X 1001. KS C 5601 è il vecchio nome
di KS X 1001.
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). Sono state definite diverse
codifiche di caratteri basate su ISO 2002, specialmente per il giapponese.
There are 4 graphic character sets, called G0, G1, G2, and G3, and one of them
is the current character set for codes with high bit zero (initially G0), and
one of them is the current character set for codes with high bit one
(initially G1). Each graphic character set has 94 or 96 characters, and is
essentially a 7-bit character set. It uses codes either 040–0177
(041–0176) or 0240–0377 (0241–0376). G0 always has size
94 and uses codes 041–0176.
Switching between character sets is done using the shift functions
^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). The function LS
n
makes character set G
n the current one for codes with high bit zero.
The function LS
nR makes character set G
n the current one for
codes with high bit one. The function SS
n makes character set
G
n (
n=2 or 3) the current one for the next character only
(regardless of the value of its high order bit).
Un insieme da 94 caratteri viene denotato come insieme G
n 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 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.
Un insieme da 96 caratteri viene denotato come l'insieme G
n 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 G
n 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 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 is a Thai national standard character set and a superset of ASCII. In
the same fashion as the ISO 8859 series, Thai characters are mapped into
0xa1–0xfe.
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).
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 10646 a 31 bit, la
progressione continua fino alle codifiche a 6 byte.)
Per la maggior parte dei testi codificati con 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 i testi 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, la conversione generale richiede l'uso di tabelle di
conversione, che possono essere piuttosto grandi per codifiche a 16 bit.
Note that UTF-8 is self-synchronizing: 10xxxxxx is a tail, any other byte is the
head of a code. Note that the only way ASCII bytes occur in a UTF-8 stream, is
as themselves. In particular, there are no embedded NULs ('\0') or '/'s that
form part of some larger code.
Since ASCII, and, in particular, NUL and '/', are unchanged, the kernel does not
notice that UTF-8 is being used. It does not care at all what the bytes it is
handling stand for.
Le sequenze di dati Unicode sono solitamente rese attraverso tabelle di
"sottocaratteri" 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 nella console
Linux in modalità UTF-8 si può usare un insieme di caratteri con
512 simboli diversi. Questo non è sufficiente per giapponese, cinese e
coreano, ma basta per la maggior parte degli altri utilizzi.
iconv(1),
ascii(7),
iso_8859-1(7),
unicode(7),
utf-8(7)
La traduzione italiana di questa pagina di manuale è stata creata da
Ottavio G. Rizzo <
[email protected]>, Elisabetta Galli
<
[email protected]> e Marco Curreli <
[email protected]>
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
[email protected]