I computer non comprendono il testo da soli. Perciò ogni carattere è rappresentato da un numero. Tradizionalmente, i set di numeri usati per rappresentare alfabeti e simboli (conosciuti come sistemi di codifica o "character sets") erano limitati nella loro dimensione a causa dei limiti hardware dei computer.
Il più comune (o almeno il più largamente accettato) character set è il codice ASCII (American Standard Code for Information Interchange). Molti ritengono che ASCII sia lo standard software che abbia goduto di maggior successo in assoluto. Il moderno ASCII fu standardizzato nel 1986 (ANSI X3.4, RFC 20, ISO/IEC 646:1991, ECMA-6) dall'American National Standards Institute.
Il codice ASCII è a 7 bit, ovvero utilizza sequenze di bit rappresentabili con sette cifre binarie, che corrispondono all'intervallo da 0 a 127 in numeri decimali. Essi includono 32 caratteri di controllo non visibili, da 0 a 31, con il carattere di controllo finale, DEL o "delete", al 127. I caratteri da 32 a 126 sono visibili: spazi, punteggiatura, lettere e numeri.
L'ottavo bit nel codice ASCII era usato in origine come parity per il controllo degli errori. Quando tale funzione non è desiderata, esso viene lasciato a 0. Questo significa che nel codice ASCII ogni carattere è rappresentato da un singolo byte.
Sebbene ASCII fosse sufficiente per comunicare in inglese moderno, per altre lingue europee che utilizzano caratteri accentati, le cose non erano così semplici. Per venire incontro a queste esigenze furono sviluppati gli standard ISO 8859. Essi erano compatibili a ritroso con ASCII, ma anziché lasciare l'ottavo bit inutilizzato, lo usavano per consentire la codifica di altri 127 caratteri. Ma i limiti di ISO 8859 vennero presto alla luce, ed infatti attualmente ci sono 15 varianti di questo standard (da 8859-1 fino a 8859-15). Fuori dall'intervallo di bytes compatibile con ASCII, c'è spesso conflitto tra le lettere rappresentate da ogni byte. A complicare ulteriormente l'interoperabiltà tra le codifiche di caratteri, Windows-1252 è utilizzato in alcune versioni di Microsoft Windows per le lingue dell'Europa Occidentale. Esso è un superset di ISO 8859-1, ma differisce da questo standard in diversi punti. Ad ogni modo, tutti questi set mantengono la compatibilità con ASCII.
Il necessario sviluppo di codifiche single-byte completamente differenti, per gli alfabeti non latini, come EUC (Extended Unix Coding), che è utilizzato per il giapponese e per il coreano (e in misura minore per il cinese), creò una confusione ancor maggiore, mentre sistemi operativi diversi continuavano ad utilizzare character sets diversi per le stesse lingue, ad esempio Shift-JIS e ISO-2022-JP. Gli utenti che avessero voluto visualizzare caratteri cirillici dovevano scegliere tra la codifica KOI8-R per il russo e il bulgaro, la KOI8-U per l'ucraino, e gli altri set cirillici, come lo sfortunato ISO 8859-5 e il comune Windows-1251. Tutti questi set di caratteri fecero venire meno quasi totalmente la compatibilità con ASCII (tuttavia le codifiche KOI8 mettono i caratteri cirillici nell'ordine latino, cosicché togliendo l'ottavo bit, il testo può ancora essere decifrato in un terminale ASCII attraverso una translitterazione case-reversed.)
Questo ha portato confusione, oltre che una quasi totale incapacità di comunicazione tra le lingue, soprattutto se utilizzano alfabeti diversi. Ma c'è Unicode.
Unicode supera il tradizionale limite del byte singolo che affligge i set di caratteri. Utilizza 17 "piani" di 65.536 unità di codice, per rappresentare un massimo di 1.114.112 caratteri. Poiché il primo piano, detto anche "Basic Multilingual Plane" o BMP, contiene praticamente tutto ciò che serve in genere a un utente, molti ritengono erroneamente che Unicode sia un character set a 16 bit.
Unicode è stato mappato in molti modi diversi, ma i due più comuni sono UTF (Unicode Transformation Format) e UCS (Universal Character Set). Un numero dopo UTF indica il numero di bit in una unità, mentre il numero dopo UCS indica il numero di byte. UTF-8 è diventato il più diffuso mezzo di interscambio di testo Unicode, grazie alla sua natura pulita a 8 bit, ed è proprio questo infatti l'oggetto di questo documento.
UTF-8 è una codifica di caratteri a lunghezza variabile, cioè utilizza da 1 a 4 bytes per simbolo. Così il primo byte UTF-8 è usato per codificare l'ASCII, dando a questo set di caratteri la piena compatibilità a ritroso con ASCII. In UTF-8 ASCII e i caratteri latini sono intercambiabili con un piccolo aumento nella dimensione dei dati, perché solo il primo bit viene utilizzato. Gli utenti di alfabeti orientali, ad esempio i giapponesi, ai quali è stato assegnato un intervallo di byte più elevato, sono scontenti, poiché questo causa un 50% di ridondanza nei loro dati.
UTF-8 consente di lavorare in un ambiente multilingue rispettoso degli standard e internazionalmente accettato, con una ridondanza di dati relativamente bassa. UTF-8 è il modo migliore per trasmettere testo non ASCII via Internet, Email, IRC e praticamente qualunque altro mezzo. Nonostante ciò molte persone considerano l'uso di UTF-8 nelle comunicazioni online un abuso. È sempre meglio conoscere l'opinione verso UTF-8 di uno specifico canale, mailing list o gruppo Usenet prima di usare caratteri UTF-8
Adesso che hai compreso i principi che stanno dietro a Unicode, sei pronto ad utilizzare UTF-8 nel tuo sistema.
Il requisito preliminare per poter utilizzare UTF-8 è avere installata una versione di glibc che abbia il supporto per la nostra lingua. Per ottenere questo si utilizza il file
Fatto ciò dobbiamo vedere se è già disponibile una localizzazione UTF-8 per la nostra lingua, e se non lo è dobbiamo crearne una.
(Sostituire "it_IT" con le impostazioni locali desiderate) # locale -a | grep 'it_IT' it_IT it_IT.UTF-8
Dell'output della riga di comando ci interessa il risultato con un suffisso
(Sostituire "it_IT" con le impostazioni locali desiderate) # localedef -i it_IT -f UTF-8 it_IT.UTF-8
Un altro modo per includere una localizzazione UTF-8 è aggiungerla al file
it_IT.UTF-8/UTF-8
C'è una variabile d'ambiente che deve essere impostata per poter utilizzare la nostra nuova localizzazione UTF-8:
Altri preferiscono impostare la localizzazione globalmente. Si raccomanda in modo particolare questa opzione se
Si può impostare la localizzazione globalmente utilizzando
(Come sempre, sostituire "it_IT.UTF-8" con la propria localizzazione) LC_ALL="it_IT.UTF-8"
Fatto ciò l'ambiente deve essere aggiornato affinché la modifica sia operativa.
# env-update >>> Regenerating /etc/ld.so.cache... * Caching service dependencies ... # source /etc/profile
A questo punto, eseguiamo
# locale LANG= LC_CTYPE="it_IT.UTF-8" LC_NUMERIC="it_IT.UTF-8" LC_TIME="it_IT.UTF-8" LC_COLLATE="it_IT.UTF-8" LC_MONETARY="it_IT.UTF-8" LC_MESSAGES="it_IT.UTF-8" LC_PAPER="it_IT.UTF-8" LC_NAME="it_IT.UTF-8" LC_ADDRESS="it_IT.UTF-8" LC_TELEPHONE="it_IT.UTF-8" LC_MEASUREMENT="it_IT.UTF-8" LC_IDENTIFICATION="it_IT.UTF-8" LC_ALL=it_IT.UTF-8
Questo è tutto. Ora stai usando una localizzazione UTF-8, e il prossimo passo è la configurazione delle applicazioni che usi ogni giorno.
Quando Unicode iniziò a prendere forza nel mondo del software, i set di caratteri multibyte non erano adatti a linguaggi come il C, in cui sono scritti molti programmi che la gente usa ogni giorno. Perfino oggi, alcuni programmi non sono in grado di gestire UTF-8 in maniera adeguata. Fortunatamente, la gran parte di essi non dà problemi!
Ci sono diverse opzioni NLS nel menù di configurazione del kernel di Linux, ma è importante non confondersi! In genere, la sola cosa da fare è compilare il supporto NLS per UTF-8 dentro il kernel, impostando l'opzione NLS di default a utf8.
File Systems --> Native Language Support --> (utf8) Default NLS Option <*> NLS UTF8( <*> anche altri set di caratteri che sono utilizzati nei filesystem FAT e nei CD-ROM Joilet.)
Se prevedi di montare partizioni NTFS, potresti aver bisogno di specificare l'opzione
File Systems --> DOS/FAT/NT Filesystems --> (437) Default codepage for fat
Dovresti evitare di impostare
Per modificare la codifica dei nomi file, può essere utilizzato
# emerge --ask app-text/convmv(Sintassi del comando) # convmv -f <current-encoding> -t utf-8 <filename>(Sostituisce iso-8859-1 con il charset utf-8) # convmv -f iso-8859-1 -t utf-8 filename
Per modificare la codifica del
(Sostituisce iso-8859-1 con il charset utf-8) (Controlla se l'output è corretto) # iconv -f iso-8859-1 -t utf-8 filename(Converte il file, creando un nuovo file) # iconv -f iso-8859-1 -t utf-8 filename > newfile
A questo scopo può essere usato anche
Per abilitare UTF-8 sulla console, è necessario editare
La variabile
(Cambia "it" con il tuo layout locale) KEYMAP="it"
È cosa saggia aggiungere
# emerge --update --deep --newuse world
Dobbiamo anche ricompilare i pacchetti collegati ad essi, ora che i cambiamenti alle flag USE sono stati applicati. Il tool che utilizzeremo (
# revdep-rebuild --soname libncurses.so.5 # revdep-rebuild --soname libslang.so.1
Tutti i più importanti ambienti desktop supportano pienamente Unicode, e non richiederanno nessuna ulteriore configurazione. Questo perché i toolkit grafici alla base di essi (Qt o GTK+2) supportano UTF-8. Di conseguenza, tutte le applicazioni che si basano su questi toolkit dovrebbero essere immediatamente compatibili con UTF-8.
Le eccezioni a questa regola arrivano con Xlib e GTK+1. GTK+1 richiede un FontSpec iso-10646-1 in ~/.gtkrc, per esempio
style "user-font" { fontset="-misc-fixed-*-*-*-*-*-*-*-*-*-*-iso10646-1" } widget_class "*" style "user-font"
Se un'applicazione supporta sia Qt che GTK+2, l'interfaccia grafica GTK+2 GUI darà in genere risultati migliori con Unicode.
I fonts TrueType hanno il supporto per Unicode, e la maggiorparte dei fonts inclusi in Xorg hanno un ottimo supporto per i caratteri, sebbene, ovviamente, non tutti i segni disponibili in Unicode sono stati creati per quei fonts. Per compilare i fonts (compreso il set Bitstream Vera) con il supporto per i caratteri dell'Asia Orientale in X, assicurati di avere impostato la flag USE
Inoltre, diversi pacchetti di fonts in Portage sono compatibili con Unicode.
# emerge terminus-font intlfonts freefonts cronyx-fonts corefonts
I window managers non compilati su GTK o Qt hanno generalmente un supporto Unicode molto buono, in quanto spesso utilizzano la libreria Xft per gestire i fonts. Se il tuo window manager non usa Xft per i fonts, puoi sempre utilizzare come font Unicode il FontSpec menzionato nella sezione precedente.
Gli emulatori di terminale che utilizzano Xft e supportano Unicode sono più difficili da trovare. A parte Konsole e gnome-terminal, le migliori opzioni in Portage sono
defutf8 on
Vim fornisce pieno supporto UTF-8, e inoltre rileva automaticamente i file UTF-8. Per maggiori informazioni su Vim, usa
Anche Emacs 22.x o successivo supporta pienamente UTF-8. Xemacs 22.x non supporta ancora la combinazione dei caratteri.
Le versioni precedenti di Emacs e/o Xemacs potrebbero richiedere l'installazione di
(require 'un-define) (require 'jisx0213) (set-language-environment "Japanese") (set-default-coding-systems 'utf-8) (set-terminal-coding-system 'utf-8)
Attualmente Nano non fornisce supporto per UTF-8, sebbene esso sia stato previsto da lungo tempo. Con un po' di fortuna, la situazione cambierà in futuro. Al momento della redazione di questo documento, il supporto UTF-8 si trova nel CVS di Nano, e dovrebbe essere incluso nella prossima release.
Attualmente,
La shell C,
Irssi ha un completo supporto UTF-8, ma richiede all'utente di settare un'opzione.
/set term_type UTF-8
Quando caratteri non ASCII sono spesso convertiti in charsets non UTF-8, il comando
Il client di posta Mutt ha un supporto Unicode molto buono. Per usare UTF-8 con Mutt, non è necessario editare alcun file di configurazione. Mutt lavorerà in ambiente Unicode senza modifiche, se tutti i file di configurazione (firma compresa) sono codificati in UTF-8.
Maggiori informazioni sono disponibili nella
Si usano molto
LESSCHARSET=utf-8
Le Man pages sono parte integrante di ogni macchina Linux. Per essere sicuro che ogni carattere Unicode nelle tue man pages sia visualizzato correttamente, edita
(Questa è la vecchia riga) NROFF /usr/bin/nroff -Tascii -c -mandoc(Sostituisci la riga sopra con questa) NROFF /usr/bin/nroff -mandoc -c
(Per elinks, editare /etc/elinks/elinks.conf o ~/.elinks/elinks.conf e aggiungere la seguente riga) set terminal.linux.utf_8_io = 1(Per links, editare ~/.links/links.cfg e aggiungere la seguente riga) terminal "xterm" 0 1 0 us-ascii utf-8
Ci sono numerosi siti per testare UTF-8.
Quando utilizzi un browser testuale, assicurati sempre di essere su un terminale compatibile con Unicode.
Se vedi alcuni caratteri visualizzati in riquadri con lettere o numeri all'interno, significa che il tuo font non ha un carattere per il simbolo che UTF-8 vuole. Al suo posto, visualizza un riquadro con il codice esadecimale del simbolo UTF-8.
Per scrivere, all'interno di X, caratteri non contenuti sulla propria tastiera, si possono utilizzare le
Per abilitare le dead keys in X, è necessario un layout che le supporti. La maggiorparte dei layout europei hanno già dead keys con le varianti di default. Tuttavia, questo non avviene nei layout nordamericani. Sebbene vi sia un certo grado di incompatibilità tra i layout, la soluzione più semplice sembra essere quella di utilizzare un layout nella forma "en_US" anziché "us", per esempio. Il layout è impostato in
Section "InputDevice" Identifier "Keyboard0" Driver "kbd" Option "XkbLayout" "en_US"# Anziché solo "us" (Altre opzioni Xkb vanno qui) EndSection
Questa modifica diverrà effettiva al riavvio del server X. Per applicarla immediatamente, usa il tool
Probabilmente è più semplice descrivere le dead keys con degli esempi. Sebbene i risultati dipendano dalla localizzazione, i concetti dovrebbero rimanere gli stessi qualunque essa sia. Gli esempi qui sotto contengono UTF-8, quindi per vederli devi o impostare il tuo browser affinché visualizzi la pagina come UTF-8, oppure avere una localizzazione UTF-8 già configurata.
Premendo contemporaneamente AltGr e [, lasciandoli, e premendo poi 'a', viene prodotta una 'ä'. Premendo contemporaneamente AltGr e [, e premendo poi 'e', viene prodotta una 'ë'. Premendo contemporaneamente AltGr e ';' viene prodotta una 'á', mentre premendo contemporaneamente AltGr e ';', lasciandoli, e premendo poi 'e', viene prodotta una 'é'.
Premendo AltGr, Shift e '[' contemporaneamente, lasciandoli, e premendo poi 'a', viene prodotta una 'å' scandinava. Similmente, premendo AltGr, Shift e '[' contemporaneamente, lasciando
AltGr può essere anche usato da solo con i tasti alfabetici. Ad esempio, AltGr ed 'm' formano una lettera mu greca minuscola: 'µ'. AltGr ed 's' formano una 'ß'. Come molti europei si aspettano (perché così è scritto sulla loro tastiera), AltGr e '4' (o 'E', dipende dal layout della tastiera) formano il simbolo dell'Euro, '€'.