Wikipedia menjelaskan dengan cukup baik: UTF-8 vs Latin-1 (ISO-8859-1). Mantan adalah variable-length encoding, orang single-byte fixed length encoding. Latin-1 encode pertama 256 poin kode Unicode character set, sedangkan UTF-8 dapat digunakan untuk mengkodekan semua kode poin. Di fisik pengkodean tingkat, hanya codepoints 0 - 127 mendapatkan dikodekan identik; kode poin 128 - 255 berbeda dengan menjadi 2-urutan byte dengan UTF-8 sedangkan mereka satu byte dengan Latin-1.
UTF adalah keluarga multi-byte skema pengkodean yang dapat mewakili Unicode kode poin yang dapat reperesentative hingga 2^31 [kira-kira 2 miliar] karakter. UTF-8 adalah fleksibel sistem pengkodean yang menggunakan antara 1 dan 4 byte untuk mewakili pertama 2^21 [kira-kira 2 juta] kode poin.
Singkat cerita: setiap karakter dengan kode titik/ordinal representasi di bawah 127, alias 7-nyaman-aman ASCII diwakili oleh orang yang sama 1-urutan byte, serta single-byte pengkodean. Setiap karakter dengan kode titik di atas 127 diwakili oleh urutan dua atau lebih byte, dengan khusus pengkodean penjelasan terbaik di sini.
ISO-8859 adalah keluarga single-byte skema pengkodean yang digunakan untuk mewakili huruf yang dapat direpresentasikan dalam berbagai 127 255. Ini berbagai huruf yang didefinisikan sebagai "bagian" dalam format ISO-8859-n, yang paling akrab ini mungkin menjadi ISO-8859-1 aka 'Latin-1'. Seperti dengan UTF-8, 7-nyaman-aman ASCII tetap tidak terpengaruh terlepas dari encoding yang digunakan.
Kelemahan ini skema pengkodean adalah ketidakmampuan untuk mengakomodasi bahasa terdiri dari lebih dari 128 simbol-simbol, atau aman untuk menampilkan lebih dari satu keluarga dari simbol-simbol pada satu waktu. Juga, ISO-8859 pengkodean yang telah jatuh dari nikmat dengan munculnya UTF. ISO "Kelompok Kerja" bertanggung jawab itu telah dibubarkan pada tahun 2004, meninggalkan pemeliharaan sampai dengan induknya subkomite.
ISO-8859-1 adalah warisan standar dari kembali di tahun 1980-an. Hal ini hanya dapat mewakili 256 karakter sehingga hanya cocok untuk beberapa bahasa di dunia barat. Bahkan untuk banyak bahasa yang didukung, beberapa karakter yang hilang. Jika anda membuat file teks dalam encoding dan mencoba copy/paste beberapa karakter Cina, anda akan melihat hasil yang aneh. Jadi dengan kata lain, don't menggunakannya. Unicode telah mengambil alih dunia dan UTF-8 ini cukup banyak standar hari ini kecuali jika anda memiliki beberapa warisan alasan (seperti header HTTP yang perlu kompatibel dengan segala sesuatu).
ASCII: 7 bit. 128 kode poin.
ISO-8859-1: 8 bit. 256 kode poin.
UTF-8: 8-32 bit (1-4 byte). 1,112,064 kode poin.
Kedua ISO-8859-1 dan UTF-8 yang kompatibel dengan ASCII, tetapi UTF-8 tidak kompatibel dengan ISO-8859-1:
#!/usr/bin/env python3
c = chr(0xa9)
print(c)
print(c.encode('utf-8'))
print(c.encode('iso-8859-1'))
Output:
©
b'\xc2\xa9'
b'\xa9'
Dari perspektif lain, file yang kedua unicode dan pengkodean ascii gagal untuk membaca karena mereka memiliki byte 0xc0
di mereka, bisa dibaca oleh iso-8859-1 dengan benar. Peringatan ini adalah bahwa file tidak't memiliki karakter unicode itu tentu saja.
Alasan saya untuk meneliti pertanyaan ini adalah dari perspektif, dalam cara apa yang mereka kompatibel. Latin1 charset (iso-8859) adalah 100% kompatibel untuk disimpan dalam utf8 datastore. Semua ascii & diperpanjang-ascii karakter akan disimpan sebagai byte tunggal.
Akan cara lain, dari utf8 untuk Latin1 charset mungkin atau mungkin tidak bekerja. Jika ada 2-byte karakter (karakter luar diperpanjang-ascii 255) mereka tidak akan menyimpan dalam Latin1 datastore.