Unicode non è stato progettato per aggirare l'intero problema di avere molte codifiche diverse.
Unicode è stato progettato per aggirare l'intero numero di un numero che rappresenta molte cose diverse a seconda della tabella codici in uso. I numeri 0 - 127 rappresentano gli stessi caratteri in qualsiasi tabella codici Ansi. Questo è anche noto come grafico ASCII o set di caratteri. Nelle pagine codici Ansi, che consentono 256 caratteri, i numeri 128 - 255 rappresentano caratteri diversi in pagine codici diverse.
Per esempio
- Il numero $ 57 rappresenta una W maiuscola in tutte le pagine di codice, ma
- Il numero $ EC rappresenta il simbolo di inifinità nella tabella codici 437 (US), ma una "LETTERA LATINA PICCOLA N CON CEDILLA" nella tabella codici 775 (Baltico)
- Il segno Cent è il numero $ 9 miliardi nella tabella codici 437, ma il numero 96 nella tabella codici 775
Quello che ha fatto Unicode è stato capovolgerlo. In Unicode non c'è "riutilizzo". Ogni numero rappresenta un singolo carattere unico. Il numero $ 00A2 in Unicode è il segno di centesimo e il segno di centesimo non appare da nessun'altra parte nella definizione Unicode.
Perché allora ci sono così tante codifiche Unicode? Anche più versioni di (essenzialmente) la stessa, come UTF-8, UTF-16, ecc.
Non ci sono più versioni della stessa codifica. Esistono più codifiche della stessa mappa di definizione dei caratteri Unicode e queste sono state "inventate" per amministrare i requisiti di archiviazione per usi diversi dei vari piani linguali esistenti in Unicode.
Unicode definisce (o ha lo spazio per definire) 4.294.967.295 caratteri univoci. Se si desidera mapparli alla memoria su disco / memoria senza effettuare conversioni algoritmiche, sono necessari 4 byte per carattere. Se hai bisogno di memorizzare testi con caratteri di tutti i piani linguali, allora UTF-32 (che è fondamentalmente un semplice carattere 1 - codifica di archiviazione a 4 byte della definizione unicode) è probabilmente quello che ti serve.
Ma quasi nessun testo usa caratteri di tutti i piani linguali. E poi usare 4 byte per personaggio sembra un grande spreco. Soprattutto quando si tiene conto del fatto che la maggior parte delle lingue sulla terra sono definite all'interno del cosiddetto piano multilingue di base (BMP): i primi 65536 numeri della definizione Unicode.
Ed è qui che è entrato UTF-16. Se usi solo caratteri del BMP, UTF-16 lo memorizzerà in modo molto efficiente usando solo due byte per carattere. Utilizzerà solo più byte per i caratteri al di fuori del BMP. La distinzione tra UTF-16LE (Little Endian) e UTF-16BE (Big Endian) ha davvero a che fare con il modo in cui i numeri sono rappresentati nella memoria del computer (modello di byte che A0
significa hex $ A0 o $ 0A).
Se il tuo testo usa ancora meno caratteri diversi, come la maggior parte dei testi nelle lingue dell'Europa occidentale, vorrai limitare ancora di più i requisiti di archiviazione per i tuoi testi. Da qui UTF-8, che utilizza un singolo byte per memorizzare i caratteri presenti nel grafico ASCII (i primi 128 numeri) e una selezione dai caratteri Ansi (i secondi 128 numeri delle varie tabelle codici). Utilizzerà solo più byte per i caratteri al di fuori di questo set di "caratteri più utilizzati".
Quindi, per ricapitolare:
- Unicode è una mappatura dei personaggi in tutte le lingue sulla terra (e alcuni Klingon per l'avvio) e poi alcuni (matematici, musicali, ecc.) Su un numero univoco.
- Le codifiche sono algoritmi definiti per memorizzare i testi utilizzando i numeri di questa mappa di caratteri univoca nel modo più efficiente possibile, dato l '"utilizzo medio" dei caratteri all'interno dei testi.