Quelle est la différence entre le texte ASCII et Unicode?

ASCII et Unicode sont tous deux des normes qui font référence à la représentation numérique du texte, en particulier les caractères qui composent le texte. Cependant, les deux normes sont très différentes, avec de nombreuses propriétés reflétant leur ordre de création respectif.

L'Amérique contre l'univers

L'American Standard Code for Information Interchange (ASCII), sans surprise, s'adresse à un public américain en écrivant dans l'alphabet anglais. Il traite des lettres non accentuées, telles que AZ et az, ainsi qu'un petit nombre de symboles de ponctuation et de caractères de contrôle.

En particulier, il n'y a aucun moyen de représenter des mots empruntés à d'autres langues, comme café en ASCII, sans les angliciser en substituant des caractères accentués (par exemple, café ). Des extensions ASCII localisées ont été développées pour répondre aux besoins de divers langages, mais ces efforts ont rendu l'interopérabilité difficile et étiraient clairement les capacités de l'ASCII.

En revanche, le jeu de caractères codés universels (Unicode) se situe à l'extrémité opposée de l'échelle d'ambition. Unicode tente de répondre à autant de systèmes d'écriture que possible dans le monde, dans la mesure où il couvre les langues anciennes et l'ensemble préféré de tous les symboles expressifs, les emoji.

Jeu de caractères ou encodage de caractères?

En termes simples, un jeu de caractères est une sélection de caractères (par exemple, AZ) tandis qu'un encodage de caractères est une correspondance entre un jeu de caractères et une valeur qui peut être représentée numériquement (par exemple, A = 1, B = 2).

Le standard ASCII est en effet à la fois: il définit le jeu de caractères qu'il représente et une méthode de mappage de chaque caractère sur une valeur numérique.

En revanche, le mot Unicode est utilisé dans plusieurs contextes différents pour signifier différentes choses. Vous pouvez le considérer comme un terme englobant tout, comme ASCII, pour désigner un jeu de caractères et un certain nombre d'encodages. Mais, comme il existe plusieurs encodages, le terme Unicode est souvent utilisé pour désigner le jeu global de caractères, plutôt que la façon dont ils sont mappés.

Taille

En raison de sa portée, Unicode représente beaucoup plus de caractères que ASCII. L'ASCII standard utilise une plage de 7 bits pour encoder 128 caractères distincts. Unicode, par contre, est si grand que nous devons utiliser une terminologie différente juste pour en parler!

Unicode s'adresse à 1 111 998 points de code adressables . Un point de code est à peu près analogue à un espace réservé à un caractère, mais la situation est beaucoup plus compliquée que cela lorsque vous commencez à fouiller dans les détails!

Une comparaison plus utile est le nombre de scripts (ou de systèmes d'écriture) actuellement pris en charge. Bien entendu, ASCII ne gère que l'alphabet anglais, essentiellement l'écriture latine ou romaine. La version d'Unicode produite en 2020 va beaucoup plus loin: elle prend en charge un total de 154 scripts.

Espace de rangement

La plage de 7 bits de l'ASCII signifie que chaque caractère est stocké dans un seul octet de 8 bits; le bit de réserve est inutilisé en ASCII standard. Cela rend les calculs de taille triviaux: la longueur du texte, en caractères, est la taille du fichier en octets.

Vous pouvez le confirmer avec la séquence suivante de commandes bash. Tout d'abord, nous créons un fichier contenant 12 lettres de texte:

 $ echo -n 'Hello, world' > foo

Pour vérifier que le texte est en encodage ASCII, nous pouvons utiliser la commande file :

 $ file foo
foo: ASCII text, with no line terminators

Enfin, pour obtenir le nombre exact d'octets que le fichier occupe, nous utilisons la commande stat :

 $ stat -f%z foo
12

Étant donné que la norme Unicode traite une gamme de caractères beaucoup plus étendue, un fichier Unicode occupe naturellement plus d'espace de stockage. Tout dépend de l'encodage.

Répéter le même ensemble de commandes que précédemment, en utilisant un caractère qui ne peut pas être représenté en ASCII, donne ce qui suit:

 $ echo -n '€' > foo
$ file foo
foo: UTF-8 Unicode text, with no line terminators
$ stat -f%z foo
3

Ce caractère unique occupe 3 octets dans un fichier Unicode. Notez que bash a automatiquement créé un fichier UTF-8 car un fichier ASCII ne peut pas stocker le caractère choisi (€). UTF-8 est de loin le codage de caractères le plus courant pour Unicode; UTF-16 et UTF-32 sont deux codages alternatifs, mais ils sont beaucoup moins utilisés.

UTF-8 est un codage à largeur variable, ce qui signifie qu'il utilise différentes quantités de stockage pour différents points de code. Chaque point de code occupera entre un et quatre octets, avec l'intention que les caractères les plus courants nécessitent moins d'espace, fournissant un type de compression intégrée. L'inconvénient est que la détermination des exigences de longueur ou de taille d'un morceau de texte donné devient beaucoup plus compliquée.

ASCII est Unicode, mais Unicode n'est pas ASCII

Pour une compatibilité descendante, les 128 premiers points de code Unicode représentent les caractères ASCII équivalents. Comme UTF-8 encode chacun de ces caractères avec un seul octet, tout texte ASCII est également un texte UTF-8. Unicode est un sur-ensemble d'ASCII.

Cependant, comme indiqué ci-dessus, de nombreux fichiers Unicode ne peuvent pas être utilisés dans un contexte ASCII. Tout caractère hors limites sera affiché de manière inattendue, souvent avec des caractères substitués qui sont complètement différents de ceux qui étaient prévus.

Utilisation moderne

Dans la plupart des cas, l'ASCII est largement considéré comme une norme héritée. Même dans les situations qui ne prennent en charge que le script latin – où la prise en charge complète des complexités d'Unicode, par exemple -, il est généralement plus pratique d'utiliser UTF-8 et de profiter de sa compatibilité ASCII.

En particulier, les pages Web doivent être enregistrées et transmises en utilisant UTF-8, qui est la valeur par défaut pour HTML5. Ceci est en contraste avec le Web précédent, qui traitait par défaut en ASCII avant qu'il ne soit remplacé par Latin 1.

Une norme qui change

La dernière révision de l'ASCII a eu lieu en 1986.

En revanche, Unicode continue d'être mis à jour chaque année. De nouveaux scripts, personnages et, en particulier, de nouveaux emoji sont régulièrement ajoutés. Avec seulement une petite fraction de ceux-ci alloués, le jeu de caractères complet est susceptible de croître et de croître dans un avenir prévisible.

En relation: Les 100 émojis les plus populaires expliqués

ASCII contre Unicode

L'ASCII a servi son objectif pendant de nombreuses décennies, mais Unicode l'a maintenant remplacé efficacement à toutes fins pratiques autres que les systèmes hérités. Unicode est plus grand et, par conséquent, plus expressif. Il représente un effort collaboratif mondial et offre une flexibilité beaucoup plus grande, mais au prix d'une certaine complexité.