.\" Copyright (C) Markus Kuhn, 1995, 2001
.\"
.\" %%%LICENSE_START(GPLv2+_DOC_FULL)
.\" This is free documentation; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License as
.\" published by the Free Software Foundation; either version 2 of
.\" the License, or (at your option) any later version.
.\"
.\" The GNU General Public License's references to "object code"
.\" and "executables" are to be interpreted as the output of any
.\" document formatting or typesetting system, including
.\" intermediate and printed output.
.\"
.\" This manual is distributed in the hope that it will be useful,
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
.\" GNU General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public
.\" License along with this manual; if not, see
.\" .
.\" %%%LICENSE_END
.\"
.\" 1995-11-26 Markus Kuhn
.\" First version written
.\" 2001-05-11 Markus Kuhn
.\" Update
.\"
.\" Traduzione by Ottavio G. Rizzo (otto@mast.queensu.ca) - giugno 1998
.\" Aggiornamento a man-pages-2.11 di Giulio Daprelà
.\" novembre 2005
.\" Aggiornamento a man-pages-2.62 di Elisabetta Galli
.\" luglio 2007
.\" Aggiornamento a man-pages-3.53 di Marco Curreli
.\" agosto 2013
.\" Aggiornamento a man-pages-3.72 di Marco Curreli - settembre 2014
.\"
.TH UNICODE 7 2014-06-13 "GNU" "Linux Programmer's Manual"
.SH NOME
Unicode \- insieme universale di caratteri
.SH DESCRIZIONE
Lo standard internazionale ISO 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 10646) descrive una
architettura di caratteri a 31 bit
consistente di 128
.IR gruppi
a 24 bit, ciascuno diviso in 256
.I piani
a 16 bit, composti da 256
.I righe
a 8 bit, con 256
.IR colonne ,
una per ciascun carattere.
La parte 1 dello standard (ISO 10646-1)
definisce le prime 65534 posizioni (da 0x0000 a 0xfffd),
che formano il
.IR "Piano Multi-linguistico di Base (BMP)" ,
ovvero il piano 0 del gruppo 0.
La parte due dello standard (ISO 10646-2)
aggiunge caratteri al gruppo 0 al di fuori del BMP in numerosi
.I "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 10646-2 coprono solo caratteri esotici per speciali bisogni
scientifici, stampa dizionario, industria editoriale, protocolli di
livello più elevato, e entusiasti.
.PP
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.
.PP
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 8859-1 Latin-1.
.SS Caratteri combinanti
Alcuni codici di UCS
sono stati assegnati a
.IR "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.
.PP
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.
.SS Livelli di implementazione
Siccome non ci si aspetta che tutti i sistemi possano supportare
meccanismi avanzati come i caratteri combinanti, ISO 10646-1 specifica
tre
.I livelli d'implementazione
per UCS:
.TP 0.9i
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.
.TP
Livello 2
Come il livello 1, ma alcuni caratteri combinanti sono permessi in
alcuni alfabeti (per es., tailandese, laotiano, ebraico, arabo, devangari,
malese).
.TP
Livello 3
Tutti i caratteri UCS sono supportati.
.PP
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 10646-1:2000.
Unicode 3.1 ha aggiunto i piani supplementari dell'ISO 10646-2.
Lo standard Unicode
e i raporti 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.
.SS Unicode sotto Linux
Sotto GNU/Linux, il tipo C
.I 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
.B __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
.I localizzazione
appropriata attraverso variabili d'ambiente (es.,
"LANG=en_GB.UTF-8").
.PP
La funzione
.B nl_langinfo(CODESET)
restituisce il nome della codifica selezionata. Le funzioni di libreria
come
.BR wctomb (3)
e
.BR mbsrtowcs (3)
possono essere usate per trasformare i caratteri interni e le stringhe
.I wchar_t
nella codifica dei caratteri di sistema e viceversa
e
.BR wcwidth (3)
dice di quante posizioni (0\(en2) il cursore viene avanzato dall'output
di un carattere.
.PP
.SS Area privata
L'intervallo da 0xe000 a 0xf8ff nel Piano multi-linguistico di base,
non verrà mai assegnato dallo standard a nessun carattere ed è
riservato per uso privato.
Per la comunità Linux questo intervallo è
stato ulteriormente suddiviso nell'intervallo da 0xe000 a 0xefff, che
può essere usato dall'utente finale, e nell'area Linux nell'intervallo
da 0xf000 a 0xf8ff, le cui estensioni sono coordinate fra tutti gli utenti di
Linux.
Il registro dei caratteri assegnati all'area Linux è al momento
mantenuto da LANANA e il registro stesso è
.I Documentation/unicode.txt
nei sorgenti del kernel Linux.
.SS Bibliografia
.IP * 3
Information technology \(em Universal Multiple-Octet Coded Character
Set (UCS) \(em Part 1: Architecture and Basic Multilingual Plane.
International Standard ISO/IEC 10646-1, International Organization
for Standardization, Geneva, 2000.
Questa è la specifica ufficiale di UCS .
Disponibile su
.UR http://www.iso.ch/
.UE .
.IP *
The Unicode Standard, Version 3.0.
The Unicode Consortium, Addison-Wesley,
Reading, MA, 2000, ISBN 0-201-61633-5.
.IP *
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.
.IP *
Unicode Technical Reports.
.RS
.UR http://www.unicode.org\:/reports/
.UE
.RE
.IP *
Markus Kuhn: UTF-8 and Unicode FAQ for UNIX/Linux.
.RS
.UR http://www.cl.cam.ac.uk\:/~mgk25\:/unicode.html
.UE
.RE
.IP *
Bruno Haible: Unicode HOWTO.
.RS
.UR http://www.tldp.org\:/HOWTO\:/Unicode-HOWTO.html
.UE
.RE
.\" .SH AUTORE
.\" Markus Kuhn
.SH VEDERE ANCHE
.BR locale (1),
.BR setlocale (3),
.BR charsets (7),
.BR utf-8 (7)
.SH COLOPHON
Questa pagina fa parte del rilascio 3.73 del progetto Linux
.IR man-pages .
Una descrizione del progetto,
le istruzioni per la segnalazione degli errori,
e l'ultima versione di questa pagina
si trova su
\%http://www.kernel.org/doc/man\-pages/.
La versione italiana fa parte del pacchetto
.I man-pages-it
v. 3.73, a cura di:
ILDP "Italian Linux Documentation Project"
\%http://www.pluto.it/ildp
.br
Per la traduzione in italiano si pu\(`o fare riferimento a
http://www.pluto.it/ildp/collaborare/
.br
Segnalare eventuali errori di traduzione a
.IR ildp@pluto.it