web-dev-qa-db-fra.com

Est ASCII code 7 bits ou 8 bits?

Mon professeur m'a dit que ASCII est un schéma de codage de caractères à 8 bits. Mais il n’est défini que pour les codes 0-127, ce qui signifie qu’il peut s’intégrer sur 7 bits. Donc, ne peut-on pas prétendre que le bit ASCII est en réalité un code de 7 bits?

Et que voulons-nous dire quand nous disons que ASCII est du code 8 bits?

77
Anurag Kalia

ASCII a bien été conçu à l'origine comme un code à 7 bits. Cela a été fait bien avant que les octets de 8 bits ne deviennent omniprésents et même dans les années 1990, on pouvait trouver un logiciel qui supposait qu'il pouvait utiliser le 8ème bit de chaque octet de texte à ses propres fins ("pas de nettoyage de 8 bits"). De nos jours, les gens y pensent comme un codage sur 8 bits dans lequel les octets 0x80 à 0xFF n'ont pas de sens défini, mais c'est un retcon =.

Il existe des dizaines d'encodages de texte utilisant le 8ème bit; ils peuvent être classés comme compatibles ASCII ou non, et à largeur fixe ou variable. Compatibilité ASCII signifie que quel que soit le contexte , des octets simples avec des valeurs comprises entre 0x00 et 0x7F codent les mêmes caractères qu’en ASCII. Vous ne voulez rien avoir à faire avec un codage de texte non compatible ASCII si vous pouvez éventuellement l'éviter; les programmes naïfs qui s’attendent à ASCII ont tendance à les mal interpréter de façon catastrophique, souvent au détriment de la sécurité. Ils sont tellement désapprouvés de nos jours que (par exemple) HTML5 interdit leur utilisation sur le Web public, à la malheureuse exception de TF-16 . Je ne vais plus en parler.

Un codage à largeur fixe signifie ce que cela ressemble à: tous les caractères sont codés en utilisant le même nombre d'octets. Pour être compatible ASCII, un codage avec fixation fixe doit coder tous ses caractères en utilisant un seul octet, de sorte qu’il ne puisse comporter plus de 256 caractères. L’encodage le plus courant de nos jours est Windows-1252 , une extension de ISO 8859-1 .

Il n'y a qu'un seul codage compatible ASCII à largeur variable qu'il convient de connaître à l'heure actuelle, mais il est très important: TF-8 , qui regroupe tous les caractères Unicode dans un codage compatible ASCII. Vous voulez vraiment l'utiliser si vous pouvez le gérer.

Pour terminer, "ASCII" prend de nos jours sa définition pratique d'Unicode, et non sa norme d'origine (ANSI X3.4-1968), car historiquement, il Plusieurs dizaines de variantes du répertoire ASCII 127 - par exemple, une partie de la ponctuation pourrait être remplacée par des lettres accentuées afin de faciliter la transmission de texte français. De nos jours, toutes ces variations sont obsolètes et, quand les gens disent "ASCII", cela signifie que les octets de valeur 0x00 à 0x7F codent des points de code Unicode U + 0000 à U + 007F. Cela ne vous concernera probablement que si vous vous retrouvez en train de rédiger une norme technique.

Si vous êtes intéressé par l'historique de ASCII et les codages qui l'ont précédé, commencez par l'article "L'évolution des codes de caractères, 1874-1968" (copie du samizdat à l'adresse http: // falsedoor.com/doc/ascii_evolution-of-character-codes.pdf ) et poursuivez ensuite ses références (dont beaucoup ne sont pas disponibles en ligne et peuvent être difficiles à trouver même avec l'accès à une bibliothèque universitaire, je regrette de le dire ).

78
zwol

Sous Linux, man ascii dit:

ASCII est le code standard américain pour l'échange d'informations. C'est un code 7 bits. 

12
BeniBela

La table ASCII d'origine est codée sur 7 bits et comporte donc 128 caractères.

De nos jours, la plupart des lecteurs/éditeurs utilisent une table ASCII "étendue" (tirée de ISO 8859-1), codée sur 8 bits et comportant 256 caractères (y compris Á, Ä, Œ, é, è et d'autres caractères utiles pour les langues européennes ainsi que des glyphes mathématiques et d'autres symboles).

Bien que UTF-8 utilise le même encodage que la table de base ASCII (ce qui signifie que 0x41 est A dans les deux codes), il ne partage pas le même encodage pour le bloc "Latin Extended-A". Cela provoque parfois l'apparition de caractères étranges dans des mots tels que à la carte ou piñata.

8
Guillaume

Le codage ASCII est de 7 bits, mais en pratique, les caractères codés dans ASCII ne sont pas stockés par groupes de 7 bits. Au lieu de cela, un ASCII est stocké dans un octet, le bit MSB étant généralement défini sur 0 (oui, c'est gaspillé en ASCII).

Vous pouvez le vérifier en saisissant une chaîne dans le jeu de caractères ASCII dans un éditeur de texte, en définissant le codage sur ASCII et en affichant les valeurs binaire/hex:
 enter image description here 

De plus, l’utilisation du codage (strictement) ASCII est maintenant rare, en faveur de UTF-8 (qui pas gaspille le MSB mentionné ci-dessus - en fait, un MSB de 1 indique le point de code est codé avec plus de 1 octet).

1
flow2k

Le code ASCII d'origine contenait 128 caractères différents, numérotés de 0 à 127. ASCII et 7 bits sont synonymes, car l'octet de 8 bits est l'élément de stockage commun, ASCII laisse de la place pour 128 caractères supplémentaires utilisés pour les langues étrangères et autres symboles. Mais le code 7 bits était original avant le code 8 bits. ASCII représente le code standard américain pour l'échange d'informationsAu début, les systèmes de messagerie Internet ne prenaient en charge que les codes ASCII 7 bits, car il pouvait ensuite exécuter des programmes et des fichiers multimédia sur des systèmes aspirants. . Ces systèmes utilisent 8 bits de l'octet, mais ils doivent ensuite être convertis en un format 7 bits à l'aide de méthodes de codage telles que MIME, UUcoding et BinHex. Cela signifie que le 8 bits a été converti en caractères 7 bits, ce qui ajoute des octets supplémentaires pour les coder.

0
brookey