[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]
La codifica dei caratteri, intendendo ciò come il modo di rappresentare i simboli tipografici in forma elettronica, diventa un problema serio nel momento in cui si esce dallo schema abituale delle lingue di origine latina.
Nella storia dell'informatica è stata definita una quantità enorme di codifiche differenti, per adattare la limitatezza degli 8 bit tradizionali all'insieme di caratteri che serve in ogni circostanza particolare. Inoltre, nelle situazioni in cui 8 bit non potevano bastare, sono state ideate codifiche più complesse, attraverso l'abbinamento di sequenze di simboli elementari che ne rappresentano uno più complesso.
In generale, verrebbe da pensare che sarebbe stato meglio prevedere subito il problema, definendo delle unità di codifica più grandi (non più il byte, ma stringhe binarie più lunghe). Tuttavia, c'è da considerare che proprio la semplicità dell'alfabeto inglese (che non ha nemmeno le lettere accentate) ha permesso lo sviluppo rapido di tecnologia relativamente «semplice», che altrimenti sarebbe stata materialmente irraggiungibile.
Il byte stesso è stata una grande conquista. Ancora oggi ci sono sistemi di comunicazione che riconoscono unità di codifica a soli 7 bit, dove in pratica si può usare solo l'ASCII; prima ancora sono state utilizzate anche unità di codifica a soli 6 bit.
Questo capitolo ha l'intento di raccogliere alcuni concetti legati alla codifica dei caratteri, assieme a qualche indicazione sul funzionamento dello standard di codifica universale: Unicode o ISO 10646. Alcuni concetti che sono trattati qui, riprendono quanto già descritto in parte nel capitolo 220.
Per comprendere il problema della codifica, è necessario considerare prima i problemi che riguardano la definizione dei caratteri da stampa. La prima fase è la definizione di un repertorio astratto, all'interno del quale si elencano, senza un ordine preciso, le lettere e gli altri segni necessari per un certo scopo. L'insieme di questi simboli è astratto, nel senso che non è ancora stabilito l'aspetto finale, compito riservato a una fase successiva.
Il simbolo di un repertorio astratto è qualcosa di diverso dal simbolo che compone un carattere da stampa, dal momento che il secondo rappresenta il modo preciso in cui il simbolo astratto viene reso tipograficamente. Per comprendere il concetto, si pensi alla lettera «a» e all'aspetto che questo simbolo astratto può avere utilizzando stili, serie e corpi differenti. Evidentemente, si tratta sempre della stessa lettera, ma resa in modo diverso.
Alcuni gruppi di simboli astratti tendono a essere rappresentati tipograficamente in un simbolo solo, in un legato, ovvero attraverso l'avvicinamento e la sovrapposizione parziale. Il caso tipico è rappresentato dalla sequenza di lettere «fi» e «ffi», come si vede nella figura 223.2. In certi casi, la sequenza di lettere che si avvicina rappresenta una parola intera, generando così un «logotipo»; spesso, la loro importanza storica ha fatto sì che questi siano diventati dei simboli astratti autonomi. Per esempio, la parola latina «et» è diventata la e-commerciale odierna, «&»; la parola latina «ad» è diventata la chiocciola odierna, «@».(1)
La composizione tipografica elettronica, può avvenire attraverso la sovrapposizione di simboli elementari differenti, senza la necessità di legarli assieme. Nelle lingue di origine latina, il caso più comune di questa possibilità si ha con gli accenti, che potrebbero essere simboli tipografici separati da sovrapporre alle lettere a cui sono destinati. Nello stesso modo, il repertorio di simboli astratti potrebbe essere realizzato con questo criterio; per esempio, per fare riferimento a un simbolo complesso potrebbe essere necessario indicare una sequenza di simboli astratti elementari.
Alcune lingue hanno dei simboli che nella composizione tipografica devono cambiare forma a seconda del contesto. Per comprendere il concetto, si può pensare a una scrittura manuale, in cui le lettere cambiano leggermente forma a seconda di ciò che appare prima e dopo; chi conosce una scrittura stenografica manuale, può intendere ancora meglio il problema. Ad aggravare ancora di più il problema, l'adattamento contestuale di un simbolo potrebbe dipendere da una scelta stilistica, in parte arbitraria.
A volte, la larghezza di un testo deve essere adattata per esigenze estetiche, come avviene nel caso dell'allineamento simultaneo a sinistra e a destra. Nelle lingue di origine latina si ottiene questo attraverso l'allargamento degli spazi tra le parole e tra le lettere all'interno delle parole; tuttavia, alcune lingue richiedono degli adattamenti differenti, per esempio attraverso l'introduzione di altri simboli appropriati.
Da quello che è stato scritto si intende che la composizione tipografica elettronica si può considerare come l'ultima fase di un processo composto da tre livelli: definizione di un repertorio astratto di simboli; definizione di una codifica; composizione tipografica a partire dalla codifica.
repertorio astratto ----> codifica ----> composizione
La codifica non può corrispondere esattamente al repertorio astratto ideale: deve fare delle scelte. In generale, il repertorio simbolico preso in considerazione dalla codifica è identificabile come un insieme di punti di codifica (code point, secondo la documentazione di Unicode).
I problemi legati alla composizione tipografica che sono stati descritti, sono solo alcuni di quelli che si incontrano. A seconda dei casi, implicano un approccio differente per ciò che riguarda la codifica e la composizione. In breve:
lo stile tipografico è qualcosa che normalmente è gestito dal sistema di composizione, senza richiedere la definizione di punti di codifica differenti;
il legato può essere un problema risolto a livello di composizione finale, oppure può richiedere la definizione di punti di codifica aggiuntivi, quando si tratta di legati molto importanti o di logotipi;
l'adattamento contestuale richiede spesso la definizione di tanti punti di codifica quante sono le varianti contestuali del simbolo astratto, specialmente se esiste un margine di scelta da parte dell'autore;
l'adattamento della larghezza del testo dovrebbe essere compito del sistema di composizione, anche quando questo implica l'inserzione di simboli speciali.
In informatica, il termine «carattere» ha acquisito un significato ambiguo che dipende dal contesto. Per esempio, può riferirsi a un simbolo del repertorio astratto, a un punto di codifica, all'unità di memorizzazione (unità di codifica, o code unit), o al segno che viene ottenuto alla fine del processo di composizione.(2)
Di certo non si può pretendere che si smetta di usare questa parola per passare invece a una terminologia più precisa. Tuttavia è importante rendersi conto della vastità della cosa e dei problemi che ci stanno sotto.
Il modello di Unicode suddivide il problema della codifica in cinque livelli:
ACR (Abstract character repertoire)
definizione di un repertorio astratto di simboli;
CCS (Coded character set)
definizione di una mappa in cui si abbina un numero intero, non negativo, a ogni simbolo del repertorio astratto che si intende gestire;
CEF (Character encoding form)
definizione di una mappa in cui si abbinano i numeri ottenuti dal livello precedente a un insieme di sequenze dell'unità di codifica prescelta;
CES (Character encoding scheme)
definizione di una mappa di trasformazione delle unità di codifica in una sequenza seriale di byte;
TES (Transfer encoding syntax)
definizione di un metodo reversibile di trasformazione dei dati codificati in base alle limitazioni del mezzo trasmissivo.
Da un punto di vista leggermente differente, si potrebbe scomporre il problema in strati, per distinguere le fasi che vanno dalla scrittura alla trasmissione del testo e dalla ricezione del testo alla lettura. La scrittura potrebbe essere descritta con l'elenco di operazioni seguenti:
selezioni dei simboli e digitazione attraverso la tastiera (o un altro mezzo);
codifica, attraverso cui si trasforma il simbolo in un numero intero non negativo;
trasformazione in unità di codifica, in base alla forma prescelta;
adattamento in sequenze di byte;
adattamento prima del trasferimento dei dati.
Il processo di lettura dei dati, a partire dalla ricezione, è opposto:
interpretazione dei dati ricevuti e ricostruzione delle sequenze di byte di partenza;
trasformazione delle sequenze di byte in sequenze di unità di codifica;
trasformazione dalle sequenze di unità di codifica in numeri interi non negativi;
decodifica dei numeri interi non negativi;
composizione tipografica (su schermo o su carta).
Prima di questa sezione è già stato affrontato il problema dell'abbinamento tra il repertorio astratto di simboli e la codifica, senza precisare in che modo sia organizzata questa ultima. Nelle sezioni seguenti si accenna alle problematiche successive.
L'insieme di caratteri codificato è in pratica il repertorio simbolico disponibile effettivamente, ottenuto dopo la definizione di un repertorio astratto e dopo lo studio dei problemi legati alla cultura e alle consuetudini del linguaggio per il quale è stato realizzato. Questo insieme di caratteri abbina un numero intero a ogni simbolo, senza bisogno che ci sia continuità nella sequenza di tale valore (l'unica limitazione è quella per cui deve trattarsi di un valore non negativo).
Il numero che rappresenta il simbolo di un insieme di caratteri codificato, è il punto di codifica.
Alcuni esempi tradizionali di insiemi di caratteri codificati sono:
ASCII (ISO 646)
ISO 8859-1
ISO 8859-2
i primi 127 punti di codifica sono uguali all'ASCII, mentre nella parte restante il repertorio dei simboli è diverso dall'ISO 8859-1.
Alcuni insiemi di caratteri codificati prevedono l'abbinamento con una descrizione (in inglese), allo scopo di facilitarne l'identificazione. Si utilizza questa descrizione per evitare ambiguità nell'identificazione del simbolo, quando questo potrebbe essere confuso con un altro, o più semplicemente quando potrebbe essere male interpretato.
Per rappresentare un punto di codifica, basta indicare il suo numero intero (qualunque sia la sua base di numerazione). Di solito, per evitare ambiguità, quando si tratta di Unicode o di ISO 10646, si fa uso normalmente della forma U+nnnn, oppure U-nnnnnnnn, dove n è una cifra esadecimale. Evidentemente, la seconda forma è utile per individuare punti di codifica più grandi.(3)
Tuttavia, in questo documento si preferisce l'uso di una forma differente, mediata dall'XML, #xn, dove n rappresenta una o più cifre esadecimali in base alla necessità.
In questa fase della scomposizione del problema della codifica, il «carattere» è il numero intero che rappresenta il punto di codifica. Attraverso un linguaggio di programmazione che sia adeguato al problema della codifica universale, il tipo di dati carattere deve corrispondere a un intero senza segno per il quale non ci si pone il problema del limite (anche se in questo momento dovrebbe essere almeno un intero a 32 bit); di conseguenza, il tipo stringa dovrebbe essere un array del tipo carattere.
La forma codificata del carattere è il risultato di una trasformazione dal numero intero non negativo che costituisce il livello precedente, in una sequenza di unità di codifica. L'unità di codifica è un raggruppamento di bit di una lunghezza opportuna.
L'esempio più semplice di forma codificata del carattere a lunghezza fissa è dato dall'ASCII tradizionale: l'insieme di caratteri codificato è costituito da 128 punti di codifica, rappresentati da tutti gli interi che vanno da 0 a 127. L'unità di codifica utilizzata in questa situazione è un gruppo singolo di 7 bit con i quali si rappresenta lo stesso numero intero.
Il caso più comune di forma codificata del carattere a lunghezza variabile è dato dall'UTF-8, che utilizza un'unità di codifica di un ottetto (un byte), in cui i punti di codifica con valori tra 0 e 127 (da 0016 a 7F16) utilizzano una sola unità di codifica, mentre tutti gli altri ne utilizzano più di una.
In fase di interpretazione delle sequenze di unità di codifica si possono presentare i casi seguenti:
la sequenza potrebbe non essere valida, perché incompleta, o perché esclusa esplicitamente;
la sequenza potrebbe fare riferimento a un punto di codifica possibile ma non ancora assegnato a un simbolo;
la sequenza potrebbe corrispondere a un punto di codifica assegnato a un simbolo stabilito, oppure lasciato all'attribuzione libera senza un vincolo preciso.
Il problema delle sequenze incomplete si intende nel momento in cui si accetta il fatto che un forma di codifica possa prevedere una lunghezza variabile delle sequenze di unità di codifica. Il caso dei punti di codifica lasciati al libero arbitrio degli utilizzatori, è una particolarità della codifica universale (Unicode e ISO 10646); se ne può comprendere la necessità di fronte a un sistema di codifica che vuole essere completo, ma che in pratica è appena all'inizio della sua opera di catalogazione.
A questo livello della scomposizione del problema, il «carattere» è ciò che idealmente è scritto in un «file di testo» (non più solo un «file ASCII»). Anche se è stato stabilito in che modo è organizzato l'insieme di caratteri codificato, la sua rappresentazione binaria «ideale» nel file di testo dipende dalla forma prescelta. Qui si parla di rappresentazione ideale, perché la rappresentazione reale dipende dal livello successivo, in cui tutto viene tradotto a livello di byte.
Lo schema di codifica del carattere è un sistema di trasformazione attraverso il quale, le unità di codifica vengono rese in sequenze di byte messe in serie.
Per tornare all'esempio dell'ASCII, l'unità di codifica è di 7 bit, ma il «carattere» ASCII si gestisce in pratica all'interno di un byte, dove il bit più significativo viene lasciato azzerato.
In generale, il byte è un'unità di memorizzazione standard in tutte le architetture dei sistemi elaborativi e in tutti i sistemi di trasmissione dati. Questo spiega la necessità di trasferire tutto a livello di byte o di multipli di questa unità.
Dovendo utilizzare più byte per rappresentare un oggetto unico, si pone il problema dello scambio tra coppie di byte che avviene in alcune architetture. Come è noto, si distingue tra big-endian, in cui il primo byte è quello più significativo, e little-endian, in cui il primo byte è quello meno significativo. Pertanto, in questa situazione, si impone la necessità di specificare l'ordine dei byte.
La sintassi di codifica per il trasferimento è un metodo di trasformazione reversibile di una codifica, che si deve attuare a causa di qualche tipo di esigenza. Per esempio:
la necessità di evitare l'utilizzo di alcuni valori nei byte che potrebbero confondere un sistema di comunicazione o di memorizzazione;
la necessità di ridurre la dimensione dei dati utilizzando algoritmi di compressione.
Mentre il secondo caso dovrebbe essere chiaro, per comprendere il primo basta pensare alle limitazioni che ha storicamente il protocollo SMTP (posta elettronica), per cui è necessario evitare di trasmettere byte in cui il primo bit sia diverso da zero.
Il lavoro per la realizzazione del sistema di codifica universale non può partire da zero, per l'esigenza di mantenere qualche forma di compatibilità con il passato (diversamente, non verrebbe nemmeno preso in considerazione). Pertanto, le incongruenze che si possono rilevare sono dovute principalmente a questo motivo: la necessità di riutilizzare gli insiemi di caratteri codificati più importanti che erano già esistenti.
Unicode e ISO 10646 sono due standard compatibili reciprocamente che definiscono un insieme di caratteri codificato particolarmente grande, che poi deve essere trasformato nella forma codificata del carattere prescelta per la sua rappresentazione pratica in unità di codifica. Pertanto, quando di parla di Unicode, o di ISO 10646, senza specificare altro, si pensa generalmente ai punti di codifica e non alla rappresentazione finale.(4)
I primi punti di codifica di questi standard corrispondono esattamente all'ISO 8859-1. Per esempio: #x20 è lo spazio normale; #xA0 è lo spazio non interrompibile; #xAB sono le virgolette angolari aperte; #xBB sono le virgolette angolari chiuse.
Attualmente, la codifica universale utilizza principalmente tre forme codificate del carattere UTF (Unicode transformation format): UTF-8, UTF-16 e UTF-32. Ogni forma codificata del carattere del tipo UTF-n rappresenta un punto di codifica come una sequenza di una o più unità di codifica (che a sua volta occupa n bit), ottenuta attraverso una trasformazione reversibile del valore.
Con questo sistema, i punti di codifica che possono essere rappresentati vanno teoricamente da #x0 a #x7FFFFFFF (in particolare, secondo Unicode si arriva solo fino a #x10FFFF), salvo alcuni valori che sono stati esclusi espressamente. I punti di codifica esclusi più importanti sono #xFFFE e #xFFFF.
Le forme codificate del carattere che utilizzano le unità di codifica più piccole, richiedono l'uso di sequenze multiple di tali unità con maggiore frequenza. Per esempio, si può osservare il caso di UTF-8, in cui l'unità di codifica è il byte (un ottetto): mano a mano che il valore del punto di codifica cresce, è necessario utilizzare più unità di codifica per la sua rappresentazione.
Allo stato attuale dello sviluppo della codifica universale, le varie forme codificate del carattere possono utilizzare gli spazi seguenti:
UTF-8
da uno a sei unità di codifica da 8 bit (mentre secondo Unicode, che è più restrittivo dello standard ISO 10646, si hanno al massimo quattro unità);
UTF-16
UTF-32
attualmente si prevede una sola unità di codifica da 32 bit.
UTF sta per Unicode transformation format e significa implicitamente che si tratta di una mappa di trasformazione da punti di codifica Unicode a unità di codifica (è già stato descritto il fatto che il numero che segue la sigla UTF-n indica la dimensione in bit dell'unità di codifica).
In particolare, vale la pena di osservare un po' meglio UTF-8, che è il cardine della transizione verso la codifica universale nei sistemi operativi in cui non è conveniente l'utilizzo di unità di codifica più grandi. In effetti, UTF-8 è un sistema molto complesso per rappresentare simboli di qualunque lingua diversa dall'inglese, perché richiede spesso l'utilizzo di più unità per un solo simbolo.
Le caratteristiche di UTF-8 sono le seguenti:
i punti di codifica da #x0 a #x7F, corrispondenti in pratica all'ASCII, sono tradotti semplicemente in byte da 0016 a 7F16, esattamente come si fa già con l'ASCII stesso;
i punti di codifica che vanno da #x80 in su, vengono tradotti in sequenze multiple di byte, ognuno dei quali ha il bit più significativo a uno, così da evitare che i byte da 0016 a 7F16 possano apparire all'interno delle sequenze multiple;
il primo byte di una sequenza multipla che rappresenta un punto di codifica che vada da #x80 in su, contiene sempre valori nell'intervallo da C016 a FD16 e serve a indicare quanti byte vengono utilizzati per rappresentare il carattere;
i byte di una sequenza multipla che sono successivi al primo contengono valori che vanno da 8016 a BF16;
si possono definire sequenze di byte in numero massimo di sei;
i valori FE16 e FF16 non sono mai usati.
La tabella 223.1 dovrebbe chiarire meglio il concetto, abbinando i valori dei punti di codifica Unicode alle sequenze di byte con cui possono essere rappresentati. Si osservi che la lettera x serve a indicare un bit variabile.
Tabella 223.1. Sequenze multi-byte teoriche nell'UTF-8.
da | a | sequenze di ottetti |
#x0 | #x7F | 0xxxxxxx |
#x80 | #x7FF | 110xxxxx 10xxxxxx |
#x800 | #xFFFF | 1110xxxx 10xxxxxx 10xxxxxx |
#x10000 | #x1FFFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
#x200000 | #x3FFFFFF | 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
#x4000000 | #x7FFFFFFF | 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx |
Un esempio dovrebbe chiarire ancora meglio il meccanismo. La lettera accentata «è» si rappresenta attraverso il punto di codifica #xE8, che in pratica si può rendere in binario come 1110 10002, si traduce in UTF-8 come si vede nella figura 223.3.
|
Un altro esempio interessante è il punto di codifica #xFEFF (1111 1110 1111 11112); lo si vede nella figura 223.4.
|
Da questo si dovrebbe intendere il passaggio a un numero superiore di byte.
In base al modello di UTF-8, si potrebbero realizzare anche sequenze più lunghe del necessario per rappresentare un punto di codifica. Evidentemente, è compito del software che le genera evitare di sprecare dello spazio inutilmente.
Di fronte a diverse forme codificate del carattere UTF c'è la necessità di poterle identificare facilmente. Per questo si utilizza una sorta di firma iniziale, costituita in pratica dal punto di codifica #xFEFF, che quando viene trasformato in base allo schema di codifica del carattere, permette anche di controllare se l'ordine dei byte è normale o è stato invertito.
Il punto di codifica #xFEFF viene anche identificato con il nome ZWNBSP, ovvero Zero width no-break space; tuttavia, anche se si intende che si tratta di qualcosa di «innoquo» (uno spazio non interrompibile di ampiezza nulla), se è stato inserito come firma iniziale, non va inteso come parte del testo. Questo significa, che i programmi per la gestione di file di testo devono tenere conto che la firma iniziale va tolta prima di fare qualunque elaborazione (si pensi al concatenamento con un comando cat o simile).
Gli schemi di codifica del carattere riferiti alle forme codificate UTF, si possono precisare aggiungendo delle sigle alla fine del nome UTF-n. La tabella 223.2 mostra gli schemi di codifica UTF-n*, assieme alla firma iniziale (quando questa è prevista).
Tabella 223.2. Schemi di codifica UTF-n.
Schema | Firma iniziale | Note |
UTF-8 | EFBBBF16 | In condizioni normali è prevista la firma iniziale. |
UTF-8N | Si indica esplicitamente l'assenza della firma. | |
UTF-16 | UTF-16 big-endian in modo predefinito. | |
UTF-16 | FEFF16 | UTF-16 big-endian. |
UTF-16 | FFFE16 | UTF-16 little-endian. |
UTF-16BE | UTF-16 big-endian senza firma. | |
UTF-16LE | UTF-16 little-endian senza firma. | |
UTF-32 | UTF-32 big-endian in modo predefinito. | |
UTF-32 | 0000FEFF16 | UTF-32 big-endian. |
UTF-32 | FFFE000016 | UTF-32 little-endian. |
UTF-32BE | UTF-32 big-endian senza firma. | |
UTF-32LE | UTF-32 little-endian senza firma. |
Si è già accennato al modo in cui un linguaggio di programmazione può gestire i punti di codifica di questo tipo. Tuttavia, non si può dimenticare il passato; così, in tutte le situazioni in cui il «carattere» è implicitamente un intero senza segno a 8 bit, è necessario usare un'altra definizione per i punti di codifica: il carattere esteso, ovvero wide char. Nello stesso modo, dovendo parlare di stringhe, se c'è bisogno di chiarire che si tratta di una stringa secondo Unicode o ISO 10646, si parla di stringa estesa, ovvero di wide string.
La disponibilità di un sistema di codifica che faccia riferimento a un repertorio simbolico molto ampio, risolve tanti problemi del passato in cui era necessario risparmiare. Per esempio, nell'ASCII tradizionale, il trattino è unico (non si distingue la sua lunghezza) ed è anche un segno «meno». Disponendo di un repertorio molto grande, diventa importante utilizzare il simbolo giusto in base al contesto. Per esempio, la lettera latina «A» maiuscola, è diversa dalla lettera greca alfa maiuscola, anche se i due simboli possono avere lo stesso aspetto.
La descrizione che viene abbinata ai punti di codifica serve proprio per questo, in modo da evitare confusione.
Per fare un esempio più convincente, si pensi alla lettera «ß» nell'insieme ISO 8859-1. Il nome abbinato a questa lettera è «LATIN SMALL LETTER SHARP S»; come si legge non si tratta della lettera greca beta, ma di qualcosa di diverso. Per la precisione è un legato che si usa nella lingua tedesca; in mancanza del segno tipografico può essere reso come «ss» (infatti si tratta di una lettera minuscola). Utilizzare questo simbolo al posto della lettera beta sarebbe un errore; infatti, un sistema di composizione o di lettura, potrebbe anche decidere di convertire il segno nella forma semplificata che è appena stata mostrata.
Jukka Korpela, A tutorial on character code issue
Unicode Home Page
Mark Davis, Draft Unicode FAQ
Ken Whistler, Mark Davis, Unicode Technical Report #17, Character Encoding Model
Mark Davis, Forms of Unicode
<http://www.ibm.com/developerworks/library/utfencodingforms/>
C. Weider, C. Preston, K. Simonsen, H. Alvestrand, R. Atkinson, M. Crispin, P. Svanberg, RFC 2130: The Report of the IAB Character Set Workshop held 29 February - 1 March, 1996
<http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2130.html>
<http://www.cis.ohio-state.edu/cs/Services/rfc/rfc-text/rfc2130.txt>
Markus Kuhn, UTF-8 and Unicode FAQ for UNIX/Linux
Bruno Haible, The Unicode HOWTO
<ftp://ftp.ilog.fr/pub/Users/haible/utf8/Unicode-HOWTO.html>
D. Goldsmith, M. Davis, RFC 2152: UTF-7, a mail-safe transformation format of Unicode, 1997
<http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2152.html>
<http://www.cis.ohio-state.edu/cs/Services/rfc/rfc-text/rfc2152.txt>
F. Yergeau, RFC 2279: UTF-8, a transformation format of ISO 10646, 1998
<http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2279.html>
<http://www.cis.ohio-state.edu/cs/Services/rfc/rfc-text/rfc2279.txt>
Indrek Hein, An online character database
daniele @ swlibero.org
1) Nella nostra lingua si è perso l'uso di questo legato, che oggi si riacquisisce solo attraverso la lingua inglese, pertanto lo si conosce solitamente solo nella sua definizione inglese: at
2) Per fare un esempio in merito all'unità di codifica, basta pensare al byte, che spesso viene confuso con il carattere, mentre ormai è da intendersi come un'unità di memorizzazione troppo piccola per questo scopo nel sistema globale.
3) Per la precisione, questa notazione è la rappresentazione delle codifiche UCS-2 e UCS-4 a cui non si intende fare riferimento direttamente. In generale, non c'è alcun bisogno di rappresentare un punto di codifica in questo modo; tuttavia, si tratta di una simbologia immediata che dovrebbe semplificare la lettura e la comprensione del testo.
4) In generale, per maggiore chiarezza, i punti di codifica dell'Unicode e di ISO 10646 si indicano nella forma U+nnnn, oppure U-nnnnnnnn, dove n è una cifra esadecimale; ma come è già stato mostrato, qui si userà la notazione #xn dell'XML.
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome introduzione_alla_codifica_universale_dei_caratteri.html
[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]