Apa perbedaan antara UTF-8 dan ISO-8859-1 ?
utf-8
character-encoding
iso-8859-1
Jagadesh
sumber
sumber
Wikipedia menjelaskan keduanya dengan cukup baik: UTF-8 vs Latin-1 (ISO-8859-1). Yang pertama adalah pengodean panjang variabel, pengodean panjang byte tunggal yang terakhir. Latin-1 mengkodekan hanya 256 poin kode pertama dari set karakter Unicode, sedangkan UTF-8 dapat digunakan untuk menyandikan semua poin kode. Pada tingkat pengkodean fisik, hanya titik kode 0 - 127 yang dapat dikodekan secara identik; poin kode 128 - 255 berbeda dengan menjadi urutan 2-byte dengan UTF-8 sedangkan mereka adalah byte tunggal dengan Latin-1.
sumber
UTF
UTF adalah keluarga skema multi-byte encoding yang dapat mewakili titik kode Unicode yang dapat mewakili hingga 2 ^ 31 [sekitar 2 miliar] karakter. UTF-8 adalah sistem pengkodean fleksibel yang menggunakan antara 1 dan 4 byte untuk mewakili 2 ^ 21 poin kode [2 juta] pertama.
Singkat cerita: karakter apa pun dengan titik kode / representasi ordinal di bawah 127, alias ASCII 7-bit diwakili oleh urutan 1-byte yang sama seperti kebanyakan pengkodean byte tunggal lainnya. Setiap karakter dengan titik kode di atas 127 diwakili oleh urutan dua atau lebih byte, dengan rincian penyandian dijelaskan di sini .
ISO-8859
ISO-8859 adalah rangkaian skema pengodean bita tunggal yang digunakan untuk mewakili huruf yang dapat direpresentasikan dalam kisaran 127 hingga 255. Berbagai huruf ini didefinisikan sebagai "bagian" dalam format ISO-8859- n , yang paling dikenal dari ini kemungkinan adalah ISO-8859-1 alias 'Latin-1'. Seperti halnya UTF-8, ASCII 7-bit-safe tetap tidak terpengaruh terlepas dari keluarga pengkodean yang digunakan.
Kelemahan dari skema pengkodean ini adalah ketidakmampuannya untuk mengakomodasi bahasa yang terdiri dari lebih dari 128 simbol, atau untuk menampilkan lebih dari satu keluarga simbol secara aman pada satu waktu. Selain itu, penyandian ISO-8859 tidak disukai dengan munculnya UTF. "Kelompok Kerja" ISO yang bertanggung jawab atas pembubarannya pada tahun 2004, menyerahkan pemeliharaan kepada subkomite induknya.
sumber
ASCII: 7 bit. 128 poin kode.
ISO-8859-1: 8 bit. 256 poin kode.
UTF-8: 8-32 bit (1-4 byte). 1.112.064 poin kode.
ISO-8859-1 dan UTF-8 Baik kompatibel dengan ASCII, tetapi UTF-8 tidak kompatibel dengan ISO-8859-1:
Keluaran:
sumber
ISO-8859-1 adalah standar lama sejak 1980-an. Itu hanya dapat mewakili 256 karakter sehingga hanya cocok untuk beberapa bahasa di dunia barat. Bahkan untuk banyak bahasa yang didukung, beberapa karakter hilang. Jika Anda membuat file teks dalam pengkodean ini dan mencoba menyalin / menempelkan beberapa karakter Cina, Anda akan melihat hasil yang aneh. Jadi dengan kata lain, jangan gunakan itu. Unicode telah mengambil alih dunia dan UTF-8 menjadi standar akhir-akhir ini kecuali Anda memiliki beberapa alasan warisan (seperti header HTTP yang perlu kompatibel dengan semuanya).
sumber
Dari perspektif lain, file yang kedua unicode dan ascii encoding gagal dibaca karena mereka memiliki byte
0xc0
di dalamnya, tampaknya bisa dibaca oleh iso-8859-1 dengan benar. Peringatannya adalah bahwa file tersebut seharusnya tidak memiliki karakter unicode di dalamnya tentu saja.sumber
Satu hal yang lebih penting untuk disadari: jika Anda lihat
iso-8859-1
, itu mungkin merujuk ke Windows-1252 daripada ISO / IEC 8859-1 . Mereka berbeda dalam kisaran 0x80-0x9F, di mana ISO 8859-1 memiliki kode kontrol C1, dan Windows-1252 memiliki karakter yang terlihat berguna.Misalnya, ISO 8859-1 memiliki 0x85 sebagai karakter kontrol (dalam Unicode, U + 0085, ``), sedangkan Windows-1252 memiliki elipsis horizontal (dalam Unicode, U + 2026 HORIZONTAL ELLIPSIS,
…
).The WHATWG Encoding spek (seperti yang digunakan oleh HTML) tegas menyatakan
iso-8859-1
untuk menjadi label untukwindows-1252
, dan web browser tidak mendukung ISO 8859-1 dengan cara apapun: spec HTML mengatakan bahwa semua pengkodean dalam Encoding spesifikasi harus didukung, dan tidak ada lagi .Yang juga menarik, referensi karakter numerik HTML pada dasarnya menggunakan Windows-1252 untuk nilai 8-bit daripada titik kode Unicode; per https://html.spec.whatwg.org/#numeric-character-reference-end-state ,
…
akan menghasilkan U + 2026 daripada U + 0085.sumber
Alasan saya untuk meneliti pertanyaan ini adalah dari perspektif, apakah mereka cocok. Charset Latin1 (iso-8859) adalah 100% kompatibel untuk disimpan dalam datastore utf8. Semua karakter ascii & extended-ascii akan disimpan sebagai byte tunggal.
Pergi ke arah lain, dari utf8 ke Latin1 charset mungkin atau mungkin tidak berfungsi. Jika ada karakter 2-byte (karakter di luar extended-ascii 255), karakter tersebut tidak akan disimpan dalam datastore Latin1.
sumber