¿Cuál es la diferencia entre UTF-8 y ISO-8859-1?
UTF-8 es una codificación multibyte que puede representar cualquier carácter Unicode. ISO 8859-1 es una codificación de un solo byte que puede representar los primeros 256 caracteres Unicode. Ambas codifican ASCII exactamente de la misma manera.
La Wikipedia explica ambos razonablemente bien: UTF-8 frente a Latin-1 (ISO-8859-1). La primera es una codificación de longitud variable, la segunda es una codificación de longitud fija de un solo byte. Latin-1 sólo codifica los primeros 256 puntos de código del conjunto de caracteres Unicode, mientras que UTF-8 puede utilizarse para codificar todos los puntos de código. A nivel de codificación física, sólo los puntos de código 0 - 127 se codifican de forma idéntica; los puntos de código 128 - 255 se diferencian por convertirse en una secuencia de 2 bytes con UTF-8, mientras que con Latin-1 son de un solo byte.
ISO-8859-1 es un estándar heredado de la década de 1980. Sólo puede representar 256 caracteres, por lo que sólo es adecuado para algunos idiomas del mundo occidental. Incluso para muchos de los idiomas soportados, faltan algunos caracteres. Si creas un archivo de texto con esta codificación e intentas copiar/pegar algunos caracteres chinos, verás resultados extraños. Así que, en otras palabras, no lo uses. Unicode se ha apoderado del mundo y UTF-8 es prácticamente el estándar en estos días, a menos que tengas algunas razones de legado (como las cabeceras HTTP que necesitan ser compatibles con todo).