¿Cuál es la diferencia entre UTF-8 e ISO-8859-1?

¿Cuál es la diferencia entre UTF-8 e ISO-8859-1 ?

UTF-8 es una encoding multibyte que puede representar cualquier carácter Unicode. ISO 8859-1 es una encoding de un solo byte que puede representar los primeros 256 caracteres Unicode. Ambos codifican ASCII exactamente de la misma manera.

Wikipedia explica ambos razonablemente bien: UTF-8 vs Latin-1 (ISO-8859-1). Former es una encoding de longitud variable, última encoding de longitud fija de un solo byte. Latin-1 codifica solo los primeros 256 puntos de código del juego de caracteres Unicode, mientras que UTF-8 se puede usar para codificar todos los puntos de código. En el nivel de encoding física, solo los puntos de encoding 0 a 127 se codifican de manera idéntica; los puntos de código 128 – 255 difieren al convertirse en secuencia de 2 bytes con UTF-8, mientras que son bytes únicos con Latin-1.

UTF

UTF es una familia de esquemas de encoding de múltiples bytes que pueden representar puntos de código Unicode que pueden ser representativos de hasta 2 ^ 31 [aproximadamente 2 mil millones] de caracteres. UTF-8 es un sistema de encoding flexible que usa entre 1 y 4 bytes para representar los primeros 2 ^ 25 [aproximadamente 32 millones] de puntos de código.

Larga historia corta: cualquier personaje con un punto de código / representación ordinal por debajo de 127, también conocido como ASCII de 7 bits, está representado por la misma secuencia de 1 byte que la mayoría de las otras codificaciones de un solo byte. Cualquier carácter con un punto de código superior a 127 está representado por una secuencia de dos o más bytes, con el particular de encoding mejor explicado aquí .

ISO-8859

ISO-8859 es una familia de esquemas de encoding de un solo byte utilizados para representar alfabetos que se pueden representar dentro del rango de 127 a 255. Estos diversos alfabetos se definen como “partes” en el formato ISO-8859- n , el más familiar de estos probablemente sean ISO-8859-1 también conocido como ‘Latin-1’. Al igual que con UTF-8, el ASCII de 7 bits no se ve afectado independientemente de la familia de encoding utilizada.

El inconveniente de este esquema de encoding es su incapacidad para acomodar idiomas compuestos por más de 128 símbolos, o para mostrar de forma segura más de una familia de símbolos a la vez. Además, las codificaciones ISO-8859 han caído en desgracia con el aumento de UTF. El “Grupo de Trabajo” de ISO a cargo de que se haya disuelto en 2004, dejando el mantenimiento a su subcomité principal.

ISO-8859-1 es un estándar heredado de la década de 1980. Solo puede representar 256 caracteres, por lo que solo es adecuado para algunos idiomas en el mundo occidental. Incluso para muchos idiomas compatibles, faltan algunos caracteres. Si crea un archivo de texto en esta encoding e intenta copiar / pegar algunos caracteres chinos, verá resultados extraños. Entonces en otras palabras, no lo use. Unicode ha asumido el control del mundo y UTF-8 es prácticamente el estándar en estos días a menos que tenga algunas razones heredadas (como encabezados HTTP que necesitan ser compatibles con todo).

Mi razón para investigar esta pregunta fue desde la perspectiva, es de qué manera son compatibles. Latin1 charset (iso-8859) es 100% compatible para ser almacenado en un almacén de datos utf8. Todos los caracteres ascii y extended-ascii se almacenarán como de un solo byte.

Yendo del otro lado, de utf8 a Latin1 charset puede o no funcionar. Si hay caracteres de 2 bytes (caracteres más allá de 255 de ascii extendida), no se almacenarán en un almacén de datos de Latin1.

Desde otra perspectiva, los archivos que codificaciones tanto unicode como ascii no pueden leer porque tienen un byte 0xc0 en ellos, parecen ser leídos por iso-8859-1 correctamente. La advertencia es que el archivo no debería tener caracteres Unicode en él, por supuesto.