unicode(7)

NOME
unicode - insieme universale di caratteri

DESCRIZIONE
Lo standard internazionale ISO/IEC 10646 definisce l'insieme universale di caratteri (UCS: Universal Character Set). UCS contiene tutti i caratteri di tutti gli altri standard per insiemi di caratteri. Garantisce anche "compatibilità ad andata e ritorno", cioè è possibile costruire tavole di conversione in modo tale da non perdere nessuna informazione passando da una qualsiasi altra codifica a UCS e viceversa.

UCS contiene i caratteri necessari alla rappresentazione di praticamente tutte le lingue conosciute. Esso comprende non solo i caratteri latino greco, cirillico, ebreo, arabo, armeno e georgiano, ma anche alfabeti ideografici cinese, giapponese e coreano han, e i caratteri hiragana, katakana, hangul, devanagari, bengali, gurmukhi, gujarati, oriya, tamil, telugu, kannada, malayalam, thai, lao, khmer, bopomofo, tibetano, runico, etiopico, canadese sillabico, cherokee, mongolo, ogham, myanmar, sinhala, thaana, yi e altri. Per caratteri non ancora inclusi la ricerca su come codificarli al meglio è ancora in corso e prima o poi verranno aggiunti. Ciò potrebbe includere non solo geroglifici e vari linguaggi storici indo-europei, ma anche alcuni caratteri artistici selezionati come tengwar, cirth e klingon. UCS include anche un grande numero di simboli grafici, tipografici, matematici e scientifici, inclusi quelli forniti da TeX, Postscript, APL, MS-DOS, MS-Windows, Macintosh e font OCR, oltre a molti sistemi di elaborazione testi e di editoria, e altri se ne stanno aggiungendo.

Lo standard UCS (ISO/IEC 10646) descrive una architettura di caratteri a 31 bit consistente di 128 gruppi a 24 bit, ciascuno diviso in 256 piani a 16 bit, composti da 256 righe a 8 bit, con 256 colonne, una per ciascun carattere. La parte 1 dello standard (ISO/IEC 10646-1) definisce le prime 65534 posizioni (da 0x0000 a 0xfffd), che formano il Piano Multi-linguistico di Base (BMP), ovvero il piano 0 del gruppo 0. La parte 2 dello standard (ISO/IEC 10646-2) aggiunge caratteri al gruppo 0 al di fuori del BMP in numerosi piani supplementari nell'intervallo da 0x10000 a 0x10ffff. Non ci sono piani per l'aggiunta di caratteri allo standard oltre 0x10ffff, quindi, dell'intero spazio codice, solo una piccola frazione del gruppo 0 verrà usata nel prossimo futuro. Il BMP contiene tutti i caratteri che si trovano negli altri insiemi di caratteri comunemente usati. I piani supplementari aggiunti da ISO/IEC 10646-2 coprono solo caratteri esotici per speciali bisogni scientifici, stampa dizionario, industria editoriale, protocolli di livello più elevato, e entusiasti.

La rappresentazione di ciascun carattere UCS come parola di 2 byte è chiamato forma UCS-2 (solo per i caratteri BMP), mentre UCS-4 è la rappresentazione di ciascun carattere in una parola a 4 byte. In aggiunta esistono due forme di codifica UTF-8 per retrocompatibilità col software di elaborazione ASCII e UTF-16 per la gestione della retrocompatibilità dei caratteri non BMP fino a 0x10ffff del software UCS-2.

I caratteri UCS nelle posizioni da 0x0000 a 0x007f coincidono con quelli classici di US-ASCII e i caratteri da 0x0000 a 0x00ff coincidono con quelli dell'insieme ISO/IEC 8859-1 (Latin-1).

  Caratteri combinanti
Alcuni codici di UCS sono stati assegnati a caratteri combinanti. Simile ad un tasto accentato che non avanza in una macchina da scrivere, un carattere combinante aggiunge un accento al carattere precedente. I caratteri accentati più importanti hanno un loro codice in UCS, ma questo meccanismo permette di aggiungere accenti a altri segni diacritici a qualsiasi carattere. I caratteri combinanti seguono sempre il carattere che modificano. Ad esempio, il carattere tedesco Ä («A maiuscola romana con dieresi») può essere rappresentato sia col codice UCS precomposto 0x00c4, oppure come combinazione di una normale «A maiuscola romana» seguita da una «dieresi combinante»: 0x0041 0x0308.

I caratteri combinanti sono essenziali per esempio nella codifica dei caratteri Thai o per la composizione matematica e per gli utenti dell'alfabeto internazionale fonetico.

  Livelli di implementazione
Siccome non ci si aspetta che tutti i sistemi possano supportare meccanismi avanzati come i caratteri combinanti, ISO/IEC 10646-1 specifica tre livelli d'implementazione per UCS:

Livello 1
    I caratteri combinanti e Hangul Jamo (una variante della codifica dell'alfabeto coreano, dove le sillabe Hangul sono codificate come tripletta o coppia di codici vocale/consonante) non sono supportati.

Livello 2
    Come il livello 1, ma alcuni caratteri combinanti sono permessi in alcuni alfabeti (per es., tailandese, laotiano, ebraico, arabo, devangari, malese).

Livello 3
    Tutti i caratteri UCS sono supportati.

Lo Standard Unicode 3.0 pubblicato dall'Unicode Consortium contiene esattamente il piano multi-linguistico di base UCS al livello 3 d'implementazione, come descritto in ISO/IEC 10646-1:2000. Unicode 3.1 ha aggiunto i piani supplementari dell'ISO/IEC 10646-2. Lo standard Unicode e i rapporti tecnici pubblicati dall'Unicode Consortium forniscono molte informazioni aggiuntive sulla semantica e sugli usi raccomandati dei vari caratteri. Essi forniscono linee guida e algoritmi per editing, ordinamento, comparazione, normalizzazione, conversione e visualizzazione delle stringhe Unicode.

  Unicode sotto Linux
Sotto GNU/Linux, il tipo C wchar_t è un tipo intero 32-bit con segno. I suoi valori sono sempre interpretati dalla libreria C come valori del codice UCS (in tutte le localizzazioni), una convenzione che è segnalata alle applicazioni dalla libreria C di GNU definendo la costante __STDC_ISO_10646__ come specificato nello standard ISO C99.

UCS/Unicode può essere usato come semplice ASCII nei flussi input/output, comunicazioni tra terminali, file di testo, nomi file e variabili d'ambiente nella codifica multi-byte .B UTF-8 compatibile ASCII. Per segnalare l'uso di UTF-8 come codifica carattere a tutte le applicazioni deve venire selezionata una localizzazione appropriata attraverso variabili d'ambiente (es., "LANG=en_GB.UTF-8").

La funzione nl_langinfo(CODESET) restituisce il nome della codifica selezionata. Le funzioni di libreria come wctomb(3) e mbsrtowcs(3) possono essere usate per trasformare i caratteri interni e le stringhe wchar_t nella codifica dei caratteri di sistema e viceversa e wcwidth(3) dice di quante posizioni (0–2) il cursore viene avanzato dall'output di un carattere.

  Aree di uso privato (PUA)
In the Basic Multilingual Plane, the range 0xe000 to 0xf8ff will never be assigned to any characters by the standard and is reserved for private usage. For the Linux community, this private area has been subdivided further into the range 0xe000 to 0xefff which can be used individually by any end-user and the Linux zone in the range 0xf000 to 0xf8ff where extensions are coordinated among all Linux users. The registry of the characters assigned to the Linux zone is maintained by LANANA and the registry itself is Documentation/admin-guide/unicode.rst in the Linux kernel sources.

Altri due piani sono riservati per uso privato, il piano 15 (Supplementary Private Use Area-A, intervallo da 0xf0000 a 0xffffd) e il piano 16 (Supplementary Private Use Area-B, intervallo da 0x100000 a 0x10fffd).

  Bibliografia

•   Information technology — Universal Multiple-Octet Coded Character Set (UCS) — Part 1: Architecture and Basic Multilingual Plane. International Standard ISO/IEC 10646-1, International Organization for Standardization, Geneva, 2000.

    This is the official specification of UCS. Available from http://www.iso.ch/.

•   The Unicode Standard, Version 3.0. The Unicode Consortium, Addison-Wesley, Reading, MA, 2000, ISBN 0-201-61633-5.

•   S. Harbison, G. Steele. C: A Reference Manual. Fourth edition, Prentice Hall, Englewood Cliffs, 1995, ISBN 0-13-326224-3.

    Un buon testo di riferimento sul linguaggio di programmazione C. La quarta edizione comprende l'Emendamento 1 del 1994 allo standard ISO C90, che aggiunge un buon numero di funzioni di libreria C per gestire codifiche di caratteri lunghi e multibyte, ma non comprende ancora la ISO C99, che ha migliorato ulteriormente il supporto per i caratteri lunghi e multibyte.

•   Unicode Technical Reports.
    http://www.unicode.org/reports/

•   Markus Kuhn: UTF-8 and Unicode FAQ for UNIX/Linux.
    http://www.cl.cam.ac.uk/~mgk25/unicode.html

•   Bruno Haible: Unicode HOWTO.
    http://www.tldp.org/HOWTO/Unicode-HOWTO.html

VEDERE ANCHE
locale(1), setlocale(3), charsets(7), utf-8(7)

TRADUZIONE
La traduzione italiana di questa pagina di manuale è stata creata da Ottavio G. Rizzo <rizzo@pluto.linux.it>, Giulio Daprelà <giulio@pluto.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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.