Unicode, Unicode Big Endian o UTF-8? Qual è la differenza? Quale formato è migliore?


19

Quando provo a salvare un file di testo con testo non inglese in Blocco note, ottengo un'opzione per scegliere tra Unicode , Unicode Big Endian e UTF-8 . Qual è la differenza tra questi formati?

Supponendo che non voglio alcuna retrocompatibilità (con versioni o app di sistemi operativi precedenti) e non mi interessa la dimensione del file, quale di questi formati è migliore?

(Supponiamo che il testo possa essere in lingue come cinese o giapponese, oltre ad altre lingue.)

Nota: dalle risposte e dai commenti sottostanti sembra che nel gergo di Blocco note, Unicode sia UTF-16 (Little Endian), Unicode Big Endian sia UTF-16 (Big Endian) e UTF-8 sia bene UTF-8.


Risposte:


19

Boh. Quale è meglio: una sega o un martello? :-)

Unicode non è UTF

C'è un po 'nell'articolo che è un po' più rilevante per l'argomento in questione però:

  • UTF-8 si concentra sulla riduzione al minimo della dimensione dei byte per la rappresentazione dei caratteri dal set ASCII (rappresentazione a lunghezza variabile: ogni carattere è rappresentato da 1 a 4 byte e tutti i caratteri ASCII si adattano a 1 byte). Come dice Joel:

"Guarda tutti quegli zeri!", Hanno detto, poiché erano americani e stavano guardando il testo inglese che raramente utilizzava punti di codice sopra U + 00FF. Inoltre erano hippy liberali in California che volevano conservare (ghigno). Se fossero stati texani, non avrebbero avuto problemi a raddoppiare il numero di byte. Ma quei wimps californiani non potevano sopportare l'idea di raddoppiare la quantità di memoria necessaria per le stringhe

  • UTF-32 si concentra sull'esaustività e la rappresentazione a lunghezza fissa, utilizzando 4 byte per tutti i caratteri. È la traduzione più semplice, mappando direttamente il punto di codice Unicode a 4 byte. Ovviamente, non è molto efficiente in termini di dimensioni.

  • UTF-16 è un compromesso, che utilizza 2 byte per la maggior parte del tempo, ma si espande a 2 * 2 byte per carattere per rappresentare determinati caratteri, quelli non inclusi nel piano multilingue di base (BMP).

Vedi anche il minimo assoluto che ogni sviluppatore di software deve assolutamente conoscere positivamente su Unicode e set di caratteri (senza scuse!)


4
Il problema deriva dal fatto che Unicode è una "codifica", ma non nel senso dei numeri in byte. UTF-8/16/32 sono tutte codifiche Unicode, ma Unicode stesso è una mappatura da simboli a numeri. Penso che avrebbero potuto usare una terminologia più unica per evitare questa confusione.
jerryjvl,

4
Indipendentemente da ciò, per l'OP della domanda, le probabilità sono che l'applicazione significhi "UTF-16" dove dice "Unicode".
jerryjvl,

3
Non sono sicuro che l'obiettivo di UTF-8 sia la "conservazione" in contrapposizione alla retrocompatibilità con ASCII.
Mr. Shiny e New 安 宇

@Johannes: il consorzio Unicode ha deciso di non assegnare mai punti di codice sopra U + 10FFFF perché non possono essere rappresentati in UTF-16. Ciò ha avuto l'effetto di limitare UTF-8 a 4 byte.
user46971

1
"Unicode non è UTF" - per molti è WTF;)
mlvljr

4

Per le lingue europee, UTF-8 è più piccolo. Per le lingue orientali, la differenza non è così netta.

Entrambi gestiranno tutti i possibili caratteri Unicode, quindi non dovrebbe fare alcuna differenza in termini di compatibilità.


3

Esistono più codifiche di caratteri Unicode di quanto tu possa pensare.

  • UTF 8

    La codifica UTF-8 ha una larghezza variabile, che varia da 1 a 4 byte, con i bit superiori di ciascun byte riservati come bit di controllo. I bit iniziali del primo byte indicano il numero totale di byte utilizzati per quel carattere. Il valore scalare del punto di codice di un personaggio è la concatenazione dei bit non di controllo. In questa tabella, xrappresenta gli 8 bit più bassi del valore Unicode, yrappresenta i successivi 8 bit più alti e zrappresenta i bit più alti di quello.

    Unicode              Byte1     Byte2     Byte3     Byte4
    U+0000-U+007F       0xxxxxxx            
    U+0080-U+07FF       110yyyxx  10xxxxxx          
    U+0800-U+FFFF       1110yyyy  10yyyyxx  10xxxxxx    
    U+10000-U+10FFFF    11110zzz  10zzyyyy  10yyyyxx  10xxxxxx
    
  • UCS-16
  • UCS-16 BE
  • UCS-16

  • UTF-16
  • UTF-16 BE
  • UTF-16

  • UTF-32
  • UTF-32-BE

1
Esistono più codifiche di caratteri Unicode di quelle che hai elencato. Ad esempio UTF-1 , UTF-7 , UTF-EBCDIC , GB-18030 , MIME , UTF-9 e UTF-18 ... È inoltre possibile utilizzare qualsiasi schema di codifica binaria per codificare i dati Unicode. Maggiori informazioni Confronto delle codifiche Unicode
phuclv,

1

"Unicode" è un altro termine per "UTF-16", che è una codifica del set di caratteri Unicode in sedici bit per carattere. UTF-8 lo codifica in otto bit per carattere.

In entrambi i casi, qualsiasi overflow viene allocato ad altri 16 o otto bit.


Quale è meglio allora?
R. Martinho Fernandes,

"Dipende dalla situazione.
John Saunders,

Anche se per questa domanda specifica sembra che "Unicode" sia effettivamente ABUSATO come un altro termine per "UTF-16", non è così in generale - vedi la risposta di Jason.
Arjan,

1
Intendi "per unità di codice", non "per carattere"; sia UTF-8 che UTF-16 possono utilizzare più unità di codice per rappresentare un carattere. E "Unicode" e "UTF-16" NON sono la stessa cosa, tranne nella terminologia Microsoft.
user46971,

1

L'unico vero vantaggio con file di piccole dimensioni come i file di testo è la dimensione del file risultante. UTF-8 produce generalmente file più piccoli. Ma questa differenza potrebbe essere meno pronunciata con il testo cinese / giapponese.


Tieni presente che esiste anche una differenza nella larghezza di banda della rete e nell'utilizzo della memoria.
Jason Baker,

1
"UTF-8 produce generalmente file più piccoli": generalmente no. UTF-8 produce file più piccoli per i file ASCII. Se un file è costituito solo da punti di codice Unicode sopra U + 0800, sarà più grande in UTF-8 che in UTF-16.
sleske,

0

In una parola, Unicode è un set di caratteri , mentre Unicode Big Endian e utf-8 sono due codifiche , che vengono utilizzate per memorizzare i caratteri come 01 su un computer.


E la differenza è ...?
David Richerby,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.