Qual è la differenza tra Unicode e UTF-8?

Prendere in considerazione:

Alt text

È vero che unicode=utf16 ?

Molti stanno dicendo che Unicode è uno standard, non una codifica, ma la maggior parte degli editor supporta il salvataggio come codifica Unicode.

la maggior parte degli editori supporta la codifica “Unicode”.

Questo è uno sfortunato errore perpetrato da Windows.

Poiché Windows utilizza la codifica UTF-16LE internamente come formato di archiviazione della memoria per le stringhe Unicode, considera questa la codifica naturale del testo Unicode. Nel mondo Windows ci sono stringhe ANSI (la codepage del sistema sulla macchina corrente, soggetta a totale indisponibilità) e ci sono stringhe Unicode (memorizzate internamente come UTF-16LE).

Tutto ciò è stato ideato nei primi tempi di Unicode, prima che ci rendessimo conto che UCS-2 non era abbastanza e prima che UTF-8 fosse inventato. Questo è il motivo per cui il supporto di Windows per UTF-8 è a tutto tondo scarso.

Questo schema di denominazione errato divenne parte dell’interfaccia utente. Un editor di testo che utilizza il supporto per la codifica di Windows per fornire una gamma di codifiche descriverà automaticamente e in modo inappropriato UTF-16LE come “Unicode” e UTF-16BE, se fornito, come “Unicode big-endian”.

(Gli altri editor che eseguono codifiche, come Notepad ++, non hanno questo problema.)

Se ti fa sentire meglio, le stringhe ‘ANSI’ non sono basate su alcun standard ANSI.

Come afferma Rasmus nel suo articolo “La differenza tra UTF-8 e Unicode?” (collegamento fisso):

Se viene posta la domanda “Qual è la differenza tra UTF-8 e Unicode?”, Risponderebbe con una risposta breve e precisa? In questi giorni di internazionalizzazione tutti gli sviluppatori dovrebbero essere in grado di farlo. Sospetto che molti di noi non capiscano questi concetti come dovremmo. Se senti di appartenere a questo gruppo, dovresti leggere questa breve introduzione ai set di caratteri e alle codifiche.

In realtà, confrontare UTF-8 e Unicode è come confrontare mele e arance:

UTF-8 è una codifica – Unicode è un set di caratteri

Un set di caratteri è un elenco di caratteri con numeri univoci (questi numeri vengono talvolta definiti “punti di codice”). Ad esempio, nel set di caratteri Unicode, il numero per A è 41.

Una codifica d’altra parte, è un algoritmo che traduce un elenco di numeri in binario in modo che possa essere memorizzato su disco. Ad esempio, UTF-8 tradurrebbe la sequenza numerica 1, 2, 3, 4 in questo modo:

 00000001 00000010 00000011 00000100 

I nostri dati ora sono tradotti in binario e ora possono essere salvati su disco.

Adesso tutti insieme

Supponi che un’applicazione stia leggendo quanto segue dal disco:

 1101000 1100101 1101100 1101100 1101111 

L’app sa che questi dati rappresentano una stringa Unicode codificata con UTF-8 e devono mostrarlo come testo all’utente. Primo passo, è quello di convertire i dati binari in numeri. L’app utilizza l’algoritmo UTF-8 per decodificare i dati. In questo caso, il decodificatore restituisce questo:

 104 101 108 108 111 

Poiché l’app sa che questa è una stringa Unicode, può assumere che ogni numero rappresenti un carattere. Usiamo il set di caratteri Unicode per tradurre ogni numero in un carattere corrispondente. La stringa risultante è “ciao”.

Conclusione

Quindi, quando qualcuno ti chiede “Qual è la differenza tra UTF-8 e Unicode?”, Ora puoi rispondere con sicurezza in modo breve e preciso:

UTF-8 e Unicode non possono essere confrontati. UTF-8 è una codifica utilizzata per convertire i numeri in dati binari. Unicode è un set di caratteri usato per tradurre caratteri in numeri.

Non è così semplice.

UTF-16 è una codifica a larghezza variabile a 16 bit. Chiamare semplicemente qualcosa “Unicode” è ambiguo, poiché “Unicode” si riferisce a un intero set di standard per la codifica dei caratteri. Unicode non è una codifica!

http://en.wikipedia.org/wiki/Unicode#Unicode_Transformation_Format_and_Universal_Character_Set

e, naturalmente, l’obbligo Joel On Software – Il minimo assoluto Ogni sviluppatore di software assolutamente, positivo deve sapere su Unicode e set di caratteri (senza scuse!) .

Qui viene visualizzato un sacco di incomprensioni. Unicode non è una codifica, ma lo standard Unicode è dedicato principalmente alla codifica comunque.

ISO 10646 è il set di caratteri internazionali che (probabilmente) ti preoccupano. Definisce una mapping tra un insieme di caratteri nominati (es. “Latin Capital Letter A” o “Greek small letter alpha”) e un insieme di punti di codice (un numero assegnato a ciascuno – ad esempio, 61 esadecimale e 3B1 esadecimale per questi due rispettivamente, per i punti di codice Unicode, la notazione standard sarebbe U + 0061 e U + 03B1).

Un tempo Unicode definiva il proprio set di caratteri, più o meno come concorrente di ISO 10646. Era un set di caratteri a 16 bit, ma non era UTF-16; era conosciuto come UCS-2. Includeva una tecnica piuttosto controversa per cercare di mantenere il numero di caratteri necessari al minimo (Han Unification – fondamentalmente trattando caratteri cinesi, giapponesi e coreani che erano piuttosto simili allo stesso personaggio).

Da allora, il consorzio Unicode ha tacitamente ammesso che non avrebbe funzionato, e ora si concentra principalmente sui modi per codificare il set di caratteri ISO 10646. I metodi principali sono UTF-8, UTF-16 e UCS-4 (alias UTF-32). Quelli (ad eccezione di UTF-8) hanno anche le varianti LE (little endian) e BE (big-endian).

Di per sé, “Unicode” potrebbe riferirsi a quasi tutti i precedenti (sebbene possiamo probabilmente eliminare gli altri che mostra esplicitamente, come UTF-8). L’uso non qualificato di “Unicode” è probabilmente il più frequente su Windows, dove quasi sicuramente farà riferimento a UTF-16. Le prime versioni di Windows NT hanno adottato Unicode quando UCS-2 era aggiornato. Dopo che UCS-2 è stato dichiarato obsoleto (attorno a Win2k, se serve la memoria), è passato a UTF-16, che è il più simile a UCS-2 (infatti, è identico per i caratteri nel “piano multilingue di base”, che copre molto, inclusi tutti i personaggi per la maggior parte delle lingue dell’Europa occidentale).

UTF-16 e UTF-8 sono entrambe le codifiche di Unicode. Sono entrambi Unicode; uno non è più Unicode rispetto all’altro.

Non lasciare che uno sfortunato artefatto storico di Microsoft ti confonda.

Lo sviluppo di Unicode mirava a creare un nuovo standard per la mapping dei personaggi nella maggior parte delle lingue utilizzate oggi, insieme ad altri caratteri che non sono essenziali ma potrebbero essere necessari per la creazione del testo. UTF-8 è solo uno dei tanti modi in cui è ansible codificare i file perché ci sono molti modi in cui è ansible codificare i caratteri all’interno di un file in Unicode.

Fonte:

http://www.differencebetween.net/technology/difference-between-unicode-and-utf-8/

Oltre al commento di Trufa, Unicode non è esplicitamente UTF-16. Quando hanno iniziato a esaminare Unicode, è stato ipotizzato che un numero intero a 16 bit potesse essere sufficiente per memorizzare qualsiasi codice, ma in pratica non si è verificato il caso. Tuttavia, UTF-16 è un’altra codifica valida di Unicode – insieme alle varianti a 8 e 32 bit – e credo sia la codifica che Microsoft utilizza in memoria in fase di esecuzione sui sistemi operativi derivati ​​da NT.

Iniziamo tenendo presente che i dati sono memorizzati come byte; Unicode è un set di caratteri in cui i caratteri sono mappati a punti di codice (interi unici) e abbiamo bisogno di qualcosa per tradurre questi dati in punti di codice in byte. Ecco dove UTF-8 si presenta nella cosiddetta codifica: semplice!

È strano. Unicode è uno standard, non una codifica. Siccome è ansible specificare l’endianità, credo che sia effettivamente UTF-16 o forse 32.

Da dove proviene questo menu?