Pourquoi les caractères anglais ont-ils besoin de moins d'octets pour les représenter que les caractères des autres alphabets?
Bien que la plupart d’entre nous n’aient probablement jamais cessé d’y penser, les caractères alphabétiques n’ont pas tous la même taille en ce qui concerne le nombre d’octets nécessaires pour les représenter. Mais pourquoi ça? Le message Q & R du SuperUser d'aujourd'hui contient les réponses à une question d'un lecteur curieux.
La séance de questions et réponses d'aujourd'hui nous est offerte par SuperUser, une sous-division de Stack Exchange, un groupe de sites Web de questions-réponses dirigé par la communauté..
Capture partielle de la carte ASCII avec la permission de Wikipedia.
La question
Le lecteur superutilisateur khajvah veut savoir pourquoi différents alphabets occupent différentes quantités d’espace disque lorsqu’ils sont enregistrés:
Lorsque je mets 'a' dans un fichier texte et que je l'enregistre, sa taille est de 2 octets. Mais quand je mets un caractère comme 'ա' (une lettre de l'alphabet arménien), ça fait 3 octets de taille.
Quelle est la différence entre les alphabets sur un ordinateur? Pourquoi l'anglais prend-il moins de place lorsqu'il est enregistré??
Les lettres sont des lettres, non? Peut être pas! Quelle est la réponse à ce mystère alphabétique?
La réponse
Les contributeurs de SuperUser, Doktoro Reichard et Ernie, ont la solution pour nous. D'abord, Doktoro Reichard:
L’un des premiers schémas de codage mis au point pour une utilisation dans les ordinateurs grand public est l’ASCII (Code américain normalisé pour l'échange d'information) la norme. Il a été développé dans les années 1960 aux États-Unis.
L'alphabet anglais utilise une partie de l'alphabet latin (par exemple, il y a peu de mots accentués en anglais). Il y a 26 lettres individuelles dans cet alphabet, sans tenir compte de la casse. Et il devrait également exister les numéros individuels et les signes de ponctuation dans tout schéma qui prétend coder l'alphabet anglais.
Les années 1960 étaient également une époque où les ordinateurs n’avaient pas la quantité de mémoire ou d’espace disque dont nous disposions maintenant. ASCII a été développé pour être une représentation standard d'un alphabet fonctionnel sur tous les ordinateurs américains. À l'époque, la décision de définir chaque caractère ASCII sur 8 bits (1 octet) a été prise en raison de détails techniques de l'époque (l'article de Wikipedia mentionne le fait que la bande perforée contient 8 bits d'une position à la fois). En fait, le schéma ASCII d'origine peut être transmis en utilisant 7 bits et le huitième pourrait être utilisé pour les contrôles de parité. Les développements ultérieurs ont étendu le schéma ASCII d'origine pour inclure plusieurs caractères accentués, mathématiques et terminaux.
Avec la récente augmentation de l'utilisation des ordinateurs à travers le monde, de plus en plus de personnes de différentes langues ont accès à un ordinateur. Cela signifiait que, pour chaque langue, de nouveaux schémas de codage devaient être développés, indépendamment des autres schémas, qui seraient en conflit s'ils étaient lus à partir de terminaux de langue différents..
Unicode est apparu comme une solution à l’existence de différents terminaux en fusionnant tous les caractères significatifs possibles dans un seul jeu de caractères abstrait..
UTF-8 est un moyen de coder le jeu de caractères Unicode. Il s’agit d’un codage à largeur variable (c’est-à-dire que différents caractères peuvent avoir différentes tailles) et il a été conçu pour une compatibilité ascendante avec le schéma ASCII précédent. En tant que tel, le jeu de caractères ASCII conservera une taille d'un octet tandis que tous les autres caractères auront une taille d'au moins deux octets. UTF-16 est un autre moyen de coder le jeu de caractères Unicode. Par rapport à UTF-8, les caractères sont codés sous forme d'un ensemble d'une ou de deux unités de code 16 bits..
Comme indiqué dans d'autres commentaires, le caractère "a" occupe un seul octet alors que "ա" en occupe deux, indiquant un codage UTF-8. L'octet supplémentaire dans la question initiale était dû à l'existence d'un caractère de nouvelle ligne à la fin..
Suivi de la réponse d'ernie:
1 octet correspond à 8 bits et peut donc représenter jusqu'à 256 (2 ^ 8) valeurs différentes.
Pour les langues qui nécessitent plus de possibilités que cela, un mappage simple de 1 à 1 ne peut pas être maintenu, donc plus de données sont nécessaires pour stocker un caractère..
Notez que généralement, la plupart des codages utilisent les 7 premiers bits (128 valeurs) pour les caractères ASCII. Cela laisse le 8ème bit, ou 128 valeurs supplémentaires pour plus de caractères. Ajoutez des caractères accentués, des langues asiatiques, du cyrillique, etc. et vous comprendrez facilement pourquoi un octet n'est pas suffisant pour contenir tous les caractères..
Avez-vous quelque chose à ajouter à l'explication? Sound off dans les commentaires. Voulez-vous lire plus de réponses d'autres utilisateurs de Stack Exchange doués en technologie? Découvrez le fil de discussion complet ici.