Quelle est la différence entre UTF-8 y ISO-8859-1 ?
Il convient de noter que l'ASCII ne s'étend que de 0 à 127. Le MSB est toujours 0.
Quelle est la différence entre UTF-8 y ISO-8859-1 ?
Lorsque des points de code supérieurs à 127 sont définis, le système de codage est une version de l'ASCII étendu.
@RohanBhale N'utilisez pas l'expression "Extended ASCII" ; cela ne ferait que semer la confusion.
Wikipedia explique les deux assez bien : UTF-8 vs Latin-1 (ISO-8859-1). Le premier est un codage à longueur variable, le second un codage à longueur fixe sur un octet. Latin-1 ne code que 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 de l'encodage physique, seuls les points de code 0 à 127 sont encodés de manière identique ; les points de code 128 à 255 diffèrent en devenant une séquence de 2 octets avec l'UTF-8 alors qu'ils sont des octets simples avec le Latin-1.
Je ne parlais pas de séquences d'octets codées, mais plutôt de jeux de caractères codés, ce qui signifie que la norme ISO-8859-1 est utilisée pour coder les 256 premiers points de code du jeu de caractères Unicode.
UTF est une famille de schémas de codage multi-octets qui peuvent représenter Unicode points de code qui peuvent représenter jusqu'à 2^31 [environ 2 milliards] caractères. UTF-8 est un système de codage flexible qui utilise entre 1 et 4 octets pour représenter les 2^21 premiers points de code [environ 2 millions].
En bref, tout caractère dont le point de code/la représentation ordinale est inférieur à 127, c'est-à-dire l'ASCII à 7 bits, est représenté par la même séquence d'un octet que la plupart des autres codages à un octet. Tout caractère dont le point de code est supérieur à 127 est représenté par une séquence de deux octets ou plus, les particularités de l'encodage étant mieux expliquées. aquí .
ISO-8859 est une famille de schémas de codage à un octet utilisés pour représenter les alphabets qui peuvent être représentés dans la plage de 127 à 255. Ces différents alphabets sont définis en tant que "parties" dans le format ISO-8859- n dont la plus connue est probablement ISO-8859-1 alias "Latin-1". Comme pour l'UTF-8, l'ASCII à 7 bits n'est pas affecté, quelle que soit la famille d'encodage utilisée.
L'inconvénient de ce schéma d'encodage est son incapacité à prendre en compte les langues composées de plus de 128 symboles, ou à afficher en toute sécurité plus d'une famille de symboles à la fois. De plus, les codages ISO-8859 sont tombés en désuétude avec l'essor de l'UTF. Le "groupe de travail" de l'ISO qui en était chargé s'est dissous en 2004, laissant la maintenance à son sous-comité parent.
+1 pour avoir répondu à la question mais en allant plus loin et en offrant des informations sur les encodages connexes. Re : points de code pour UTF-8, selon stackoverflow.com/a/38488358/3353984 UTF-8 supporte 2^21 points de code. S'agit-il d'une erreur, ou une correction est-elle nécessaire ?
Unicode est en fait 17 plans de 2^16 points de code. De 0x00_0000 à 0x1F_FFFF. Les 17 plans peuvent accueillir 1 114 112 points de code. Parmi ceux-ci, 2 048 sont des substituts, 66 sont des non-caractères et 137 468 sont réservés à un usage privé, ce qui laisse 974 530 pour une affectation publique, soit environ 1 million. Voir Combien de caractères peuvent être encodés par UTF-8 ? .
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.
Les normes ISO-8859-1 et UTF-8 sont toutes deux rétrocompatibles avec l'ASCII, mais UTF-8 n'est pas rétrocompatible avec 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'
La norme ISO-8859-1 est une ancienne norme datant des années 1980. Elle ne peut représenter que 256 caractères et ne convient donc qu'à 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 que vous essayez de copier/coller des caractères chinois, vous verrez des résultats étranges. En d'autres termes, ne l'utilisez pas. Unicode s'est imposé dans le monde entier et UTF-8 est à peu près la norme aujourd'hui, à moins que vous n'ayez des raisons particulières (comme les en-têtes HTTP qui doivent être compatibles avec tout).
J'ai vu que les Umlauts ne sont pas censés être convertis avec UTF8. Nous avons vu des exemples de cela et en cherchant nous avons trouvé l'ISO-8859-1 et cela semble fonctionner. Nous travaillons avec un grand nombre de scientifiques allemands.
Les trémas sont représentés par deux caractères en utf8. Ils sont bien convertis et fonctionnent bien. Le problème vient des programmes qui attendent un octet par caractère. Pour ces anciens programmes, l'ISO-8859-1 a des trémas d'un octet.
"Donc en d'autres termes, ne l'utilisez pas." Je ne dirais pas cela, car il y a des cas d'utilisation où l'ISO-8859-1 convient bien mieux que l'UTF-8, car un seul octet et 256 caractères peuvent suffire, ce qui permet un traitement plus rapide et une charge utile moindre.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.