web-dev-qa-db-fra.com

Quelle est la différence entre UTF-8 et ISO-8859-1?

Quelle est la différence entre TF-8 et ISO-8859-1 ?

362
Jagadesh

UTF-8 est un codage sur plusieurs octets pouvant représenter n’importe quel caractère Unicode. ISO 8859-1 est un codage sur un octet pouvant représenter les 256 premiers caractères Unicode. Les deux encodent ASCII exactement de la même manière.

298

Wikipedia explique assez bien les deux: TF-8 vs Latin-1 (ISO-8859-1). Former est un codage de longueur variable, ce dernier codage de longueur fixe sur un octet. Latin-1 code uniquement les 256 premiers points de code du jeu de caractères Unicode, alors que UTF-8 peut être utilisé pour coder tous les points de code. Au niveau du codage physique, seuls les points de code 0 à 127 sont codés de manière identique; Les points de code 128 - 255 se différencient en devenant une séquence de 2 octets avec UTF-8 alors qu'ils sont des octets simples avec du Latin-1.

124
StaxMan

UTF

UTF est une famille de schémas de codage sur plusieurs octets pouvant représenter des points de code Unicode pouvant être représentés jusqu'à 2 ^ 31 [environ 2 milliards] de caractères. UTF-8 est un système de codage flexible qui utilise entre 1 et 4 octets pour représenter les 2 ^ 21 [environ 2 millions] premiers points de code.

Bref récit: tout caractère dont la représentation de point de code/ordinale est inférieure à 127, alias 7-bit-safe ASCII, est représenté par la même séquence d'un octet que la plupart des autres codages à un octet. Tout caractère avec un point de code supérieur à 127 est représenté par une séquence de deux octets ou plus, avec le codage le mieux expliqué ici .

ISO-8859

ISO-8859 est une famille de schémas de codage sur un octet utilisés pour représenter les alphabets pouvant être représentés dans une plage de 127 à 255. Ces différents alphabets sont définis comme des "parties" dans le format ISO-8859 - n , le plus connu d'entre eux étant probablement ISO-8859-1 aka 'Latin-1'. Comme avec UTF-8, la sécurité à 7 bits ASCII reste inchangée quelle que soit la famille de codage utilisée.

L'inconvénient de ce schéma de codage est son incapacité à prendre en charge des langues comportant plus de 128 symboles ou à afficher en toute sécurité plus d'une famille de symboles à la fois. De plus, les codages ISO-8859 ont perdu leur popularité avec la montée en puissance du format UTF. Le "groupe de travail" de l'ISO chargé de le dissoudre en 2004 a été confié à la sous-commission mère.

69
Sammitch

ISO-8859-1 est une norme héritée des années 1980. Il ne peut représenter que 256 caractères et ne convient donc que pour certaines langues du monde occidental. Même pour de nombreuses langues prises en charge, certains caractères sont manquants. Si vous créez un fichier texte dans cet encodage et essayez de copier/coller des caractères chinois, vous obtiendrez des résultats étranges. Donc, en d'autres termes, ne l'utilisez pas. Unicode a conquis le monde et UTF-8 est à peu près la norme de nos jours, sauf si vous avez des raisons héritées (comme les en-têtes HTTP qui doivent être compatibles avec tout).

16
Shital Shah
  • ASCII: 7 bits. 128 points de code.

  • ISO-8859-1: 8 bits. 256 points de code.

  • UTF-8: 8 à 32 bits (1 à 4 octets). 1 112 064 points de code.

ISO-8859-1 et UTF-8 sont tous deux compatibles avec l'ASCII, mais UTF-8 n'est pas compatible avec l'ISO-8859-1:

#!/usr/bin/env python3

c = chr(0xa9)
print(c)
print(c.encode('utf-8'))
print(c.encode('iso-8859-1'))

Sortie:

©
b'\xc2\xa9'
b'\xa9'
11
Cyker

D'un autre point de vue, les fichiers que les codages unicode et ascii ne parviennent pas à lire car ils contiennent un octet 0xc0, semblent avoir été lus par iso-8859-1 correctement. La mise en garde est que le fichier ne doit évidemment pas contenir de caractères Unicode.

1
Nikhil VJ

La raison pour laquelle j'ai effectué des recherches sur cette question était du point de vue de leur compatibilité. Le jeu de caractères Latin1 (iso-8859) est compatible à 100% pour être stocké dans un magasin de données utf8. Tous les caractères ascii et étendus-ascii seront stockés sous forme d'octet unique.

En allant dans le sens opposé, de utf8 à Latin1, charset pourrait ne pas fonctionner. S'il y a des caractères de 2 octets (caractères au-delà de extended-ascii 255), ils ne seront pas stockés dans un magasin de données Latin1.

0
Alan Jurgensen