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. Entrambe codificano ASCII esattamente allo stesso modo.
Wikipedia spiega entrambi ragionevolmente bene: UTF-8 vs Latin-1 (ISO-8859-1). Il primo è una codifica a lunghezza variabile, il secondo a singolo byte a lunghezza fissa. Latin-1 codifica solo i primi 256 punti di codice del set di caratteri Unicode, mentre UTF-8 può essere usato per codificare tutti i punti di codice. A livello di codifica fisica, solo i punti di codice 0 - 127 vengono codificati in modo identico; i punti di codice 128 - 255 differiscono per diventare una sequenza di 2 byte con UTF-8 mentre sono byte singoli con Latin-1.
ISO-8859-1 è uno standard legacy degli anni '80. Può rappresentare solo 256 caratteri, quindi è adatto solo ad alcune lingue del 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 strani risultati. Quindi, in altre parole, non usatela. Unicode ha preso il controllo del mondo e UTF-8 è praticamente lo standard di questi giorni, a meno che non abbiate qualche motivo di eredità (come le intestazioni HTTP che devono essere compatibili con tutto).