Qual è la differenza tra UTF-8 e ISO-8859-1?

Qual è la differenza tra UTF-8 e ISO-8859-1 ?

UTF-8 è una codifica multibyte che può rappresentare qualsiasi carattere Unicode. ISO 8859-1 è una codifica a byte singolo che può rappresentare i primi 256 caratteri Unicode. Entrambi codificano ASCII esattamente allo stesso modo.

Wikipedia spiega entrambi ragionevolmente bene: UTF-8 contro Latin-1 (ISO-8859-1). L’ex è una codifica a lunghezza variabile, quest’ultima codifica a lunghezza fissa a singolo byte. Latin-1 codifica solo i primi 256 punti di codice del set di caratteri Unicode, mentre UTF-8 può essere utilizzato per codificare tutti i punti di codice. A livello di codifica fisica, solo i punti codificati 0 – 127 vengono codificati identicamente; i punti di codice 128 – 255 differiscono diventando una sequenza di 2 byte con UTF-8 mentre sono byte singoli con Latin-1.

UTF

UTF è una famiglia di schemi di codifica multibyte che possono rappresentare punti di codice Unicode che possono essere reperibili fino a 2 ^ 31 [circa 2 miliardi] di caratteri. UTF-8 è un sistema di codifica flessibile che utilizza tra 1 e 4 byte per rappresentare i primi 2 ^ 25 [circa 32 milioni] di punti di codice.

Per farla breve: qualsiasi carattere con un punto di codice / rappresentazione ordinale sotto 127, alias 7-bit-safe ASCII è rappresentato dalla stessa sequenza a 1 byte della maggior parte delle altre codifiche a byte singolo. Qualsiasi carattere con un punto di codice sopra 127 è rappresentato da una sequenza di due o più byte, con il particolare della codifica meglio spiegato qui .

ISO-8859

ISO-8859 è una famiglia di schemi di codifica a byte singolo utilizzati per rappresentare alfabeti che possono essere rappresentati nell’intervallo da 127 a 255. Questi vari alfabeti sono definiti come “parti” nel formato ISO-8859- n , il più familiare di questi probabilmente sono ISO-8859-1, ovvero “Latin-1”. Come con UTF-8, l’ASCII a 7 bit sicuro rimane inalterato indipendentemente dalla famiglia di codifica utilizzata.

Lo svantaggio di questo schema di codifica è la sua incapacità di accettare lingue composte da oltre 128 simboli o di visualizzare in modo sicuro più di una famiglia di simboli contemporaneamente. Inoltre, le codifiche ISO-8859 sono cadute in disgrazia con l’aumento di UTF. Il “Gruppo di lavoro” ISO che ne è responsabile si è sciolto nel 2004, lasciando la manutenzione alla sottocommissione principale.

ISO-8859-1 è uno standard legacy degli anni ’80. Può rappresentare solo 256 caratteri, quindi è adatto solo per alcune lingue nel mondo occidentale. Anche per molte lingue supportate, mancano alcuni caratteri. Se crei un file di testo in questa codifica e provi a copiare / incollare alcuni caratteri cinesi, vedrai risultati strani. Quindi, in altre parole, non usarlo. Unicode ha conquistato il mondo e UTF-8 è praticamente lo standard in questi giorni, a meno che tu non abbia alcune ragioni legacy (come le intestazioni HTTP che devono essere compatibili con tutto).

La mia ragione per la ricerca di questa domanda è stata dal punto di vista, è in che modo sono compatibili. Latin1 charset (iso-8859) è compatibile al 100% per essere archiviato in un archivio dati utf8. Tutti i caratteri ascii e estesi-ascii verranno memorizzati come byte singolo.

Andando dall’altra parte, da utf8 a Latin1 il set di caratteri potrebbe funzionare o meno. Se sono presenti caratteri a 2 byte (caratteri oltre all’esteso-ascii 255) non verranno archiviati in un datastore Latin1.

Da un’altra prospettiva, i file che codifiche Unicode e ASCII non riescono a leggere perché hanno un byte 0xc0 in essi, sembrano essere letti correttamente da iso-8859-1. L’avvertenza è che il file non dovrebbe avere caratteri unicode in esso, ovviamente.