Table ASCII, gratuite

Référence complète des 128 caractères ASCII avec codes décimal, hexadécimal, octal et binaire.

128 caractères affichés

À propos de l'ASCII

L'ASCII (American Standard Code for Information Interchange) est une norme d'encodage de caractères sur 7 bits qui définit 128 caractères. Publiée pour la première fois en 1963, elle est à la base de la plupart des encodages de caractères modernes, y compris l'UTF-8.

Plages de caractères

Quelle est la différence entre ASCII et Unicode ?

L'ASCII définit 128 caractères sur 7 bits. L'Unicode est un sur-ensemble qui couvre plus de 149 000 caractères de tous les systèmes d'écriture. Les 128 premiers points de code Unicode sont identiques à l'ASCII.

Comment utiliser ces codes en programmation ?

En JavaScript : String.fromCharCode(65) → « A ». En Python : chr(65). En C : (char)65. Les valeurs hexadécimales fonctionnent avec les séquences d'échappement : \x41 = « A ».

Comment ça fonctionne

  1. Parcourir la table complète : les 128 caractères ASCII apparaissent dans une grille triée par point de code (de 0 à 127). Chaque cellule affiche le caractère visible (ou son abréviation pour les codes de contrôle), le code décimal et les équivalents hexadécimal / octal / binaire.
  2. Filtrer par catégorie : utilisez la liste déroulante pour restreindre aux caractères de contrôle (0-31), aux caractères imprimables (32-126), aux lettres, aux chiffres ou aux symboles. Utile lorsque vous ne vous intéressez qu'à, disons, le bloc de ponctuation.
  3. Rechercher : la zone de recherche correspond par nom de caractère (« LF »), abréviation ou valeur numérique (décimale ou hexadécimale). Taper 0x41, 65 ou A vous mène toutes à la même cellule.
  4. Cliquez sur une cellule pour copier n'importe laquelle de ses représentations dans le presse-papiers. Pratique lorsque vous avez besoin de \x1B pour une séquence d'échappement ANSI, de 0x0A pour un saut de ligne Unix, ou du 32 décimal pour une espace.

Une brève histoire de l'ASCII

L'ASCII (American Standard Code for Information Interchange) a été proposé par l'ingénieur d'IBM Bob Bemer au sous-comité X3.2 de l'American Standards Association en mai 1961, dans le but de remplacer la douzaine de codes de caractères incompatibles alors en usage. La première édition publiée fut ASA X3.4-1963 ; les lettres minuscules n'arrivèrent qu'avec la révision de 1967. La norme a été réaffirmée plusieurs fois depuis sous le nom ANSI X3.4-1986, et elle constitue la base de tout encodage de caractères moderne à travers son jumeau international, l'ISO/IEC 646 (et l'ECMA-6 européen).

Pour l'usage en réseau, l'ASCII a été codifié par la RFC 20, « ASCII format for Network Interchange, » publiée le 16 octobre 1969 et rédigée par Vint Cerf à l'UCLA. La recommandation de la RFC (« 7 bits d'ASCII intégrés dans un octet de 8 bits dont le bit de poids fort est toujours à 0 ») reste la façon dont chaque langage de programmation et protocole moderne conçoit le texte brut. Le gouvernement fédéral américain, par décret du président Lyndon B. Johnson en 1968, a imposé la prise en charge de l'ASCII sur tous les ordinateurs fédéraux à partir du 1er juillet 1969, ce qui a garanti une adoption à l'échelle de l'industrie.

Pourquoi sept bits ?

Le comité X3.2 était pris entre deux options peu attrayantes. Un code à 6 bits (utilisé par d'anciens alphabets télégraphiques comme l'ITA2) était peu fiable : un seul bit inversé sur une ligne bruyante pouvait mal décoder tous les caractères suivants s'il tombait sur un bit de bascule. Un code à 8 bits semblait du gaspillage à une époque de mémoire coûteuse et de modems lents. Le compromis fut 7 bits = 128 points de code, laissant le 8e bit libre pour la parité. Régler le bit de parité de sorte que chaque octet ait un nombre total de bits à 1 pair (ou impair) détectait 100 % des erreurs de transmission à un seul bit, exactement le problème que produisaient les coupleurs acoustiques et les câbles série des années 1960.

À mesure que les taux d'erreur baissaient et que les modems devenaient plus rapides, le 8e bit a été réaffecté. Diverses pages de code nationales d'« ASCII étendu » (Latin-1, Windows-1252, Mac Roman, KOI8-R, …) utilisaient les codes 128-255 pour les lettres accentuées et les caractères de filets, mais ces correspondances étaient mutuellement incompatibles et ont fini par être supplantées par Unicode et UTF-8.

La disposition : 128 points de code

7 bits = 27 = 128 codes distincts, organisés en 33 caractères de contrôle (0-31 plus DEL à 127) et 95 caractères imprimables (32-126) :

PlageHexaContenu
0-3100-1FCaractères de contrôle (NUL, BEL, BS, HT, LF, CR, ESC, FS-US, …)
3220ESPACE, imprimable mais invisible
33-4721-2FPonctuation : ! " # $ % & ' ( ) * + , - . /
48-5730-39Chiffres 0-9
58-643A-40Autre ponctuation : : ; < = > ? @
65-9041-5AMajuscules A-Z
91-965B-60Crochets et accents : [ \ ] ^ _ `
97-12261-7AMinuscules a-z
123-1267B-7EAccolades et tilde : { | } ~
1277FDEL, « rub out » sur bande de papier perforée (binaire 1111111)

Les caractères de contrôle qui comptent encore

La plupart des 33 caractères de contrôle sont nés comme commandes de téléscripteur et de bande perforée et sont aujourd'hui des curiosités historiques. Une poignée jouent encore un rôle porteur dans l'informatique de tous les jours :

La guerre des fins de ligne

Trois plateformes ont choisi trois conventions différentes, et les logiciels le paient depuis. L'origine mécanique est la machine à écrire et le téléscripteur, où deux actions distinctes étaient nécessaires : le retour chariot ramenait la tête d'impression à la colonne 1, et le saut de ligne faisait avancer le papier d'une ligne. Différents systèmes ont pris des décisions différentes quant à l'encodage de cela en un ou deux octets :

SESaut de ligneOctetsÉchappement
Unix / Linux / macOS moderneLF0x0A\n
Mac OS classique (avant OS X)CR0x0D\r
Windows / DOSCRLF0x0D 0x0A\r\n

La plupart des protocoles Internet imposent CRLF : HTTP, SMTP, FTP, MIME et le format de message Internet standard le spécifient tous. La RFC 5322 est sans ambiguïté : « CR et LF NE DOIVENT apparaître qu'ensemble sous la forme CRLF ; ils NE DOIVENT PAS apparaître indépendamment » dans le corps du message. À l'intérieur du code source, cependant, la convention varie selon l'équipe, ce qui explique pourquoi git fournit core.autocrlf : avec true sous Windows, git extrait les fichiers en CRLF dans la copie de travail mais les stocke en LF dans le dépôt, de sorte que le même fichier source produit la même empreinte de blob sur chaque plateforme. Une entrée .gitattributes comme * text=auto est l'alternative au niveau du projet.

Les séquences d'échappement ANSI pour la couleur du terminal

Le caractère d'échappement (ESC, 0x1B) est le préfixe des séquences d'échappement ANSI qui colorent la sortie du terminal. La norme est l'ECMA-48 (1976), reprise plus tard sous le nom ANSI X3.64 et intégrée à l'ISO/IEC 6429. La grammaire est ESC [ + paramètres + une lettre finale ; la partie ESC [ s'appelle l'introducteur de séquence de contrôle (CSI) et s'écrit de diverses manières \e[, \x1b[ ou \033[ selon le langage. Codes de rendu graphique sélectif (SGR) courants :

Ainsi, printf '\033[1;31mERROR\033[0m' affiche « ERROR » en rouge gras puis réinitialise. Tout émulateur de terminal moderne (et le Windows Terminal depuis 2019) les prend en charge.

ASCII face à Unicode et UTF-8

L'ASCII définit 128 points de code ; Unicode 16.0 (publié en 2024) en couvre plus de 154 000. Le pont crucial est l'UTF-8, l'encodage de texte dominant sur le web (utilisé par environ 98 % des sites web en 2026) : l'UTF-8 est conçu de sorte que tout octet ASCII à 7 bits (0x00-0x7F) encode le même caractère qu'il a toujours encodé, avec le bit de poids fort à zéro. La conséquence pratique est que tout fichier ASCII valide est aussi un fichier UTF-8 valide, octet pour octet identique. Les points de code au-dessus de 127 sont encodés sous forme de séquences multi-octets (2 à 4 octets) avec le bit de poids fort à 1 sur chaque octet, ce qui garantit que les analyseurs ASCII hérités ne les confondent jamais avec des caractères ASCII.

L'ASCII dans les langages de programmation courants

LangageCode → caractèreCaractère → code
JavaScriptString.fromCharCode(65)'A'.charCodeAt(0)
Pythonchr(65)ord('A')
C / C++(char)65(int)'A'
Java(char) 65(int) 'A'
Rustchar::from(65)'A' as u32
Gostring(rune(65))int('A')
Bash / shprintf '\x41'printf '%d' "'A"
HTML&#65; ou &#x41;-
Encodage d'URL%41 = « A », %20 = espace-

L'astuce du bit de casse

Une propriété petite mais élégante de la disposition ASCII : une lettre majuscule et sa contrepartie minuscule diffèrent d'exactement un bit. A vaut 65 = 0100 0001 ; a vaut 97 = 0110 0001. Seul le bit 5 diffère. Cela fait de la comparaison insensible à la casse une seule opération bit à bit : x | 0x20 force la minuscule, x & 0xDF force la majuscule, toutes deux plus rapides qu'une table de correspondance. C'était un choix de conception délibéré dans la révision de 1967 et c'est l'une des raisons pour lesquelles la disposition semble « aléatoire » par endroits : elle encode des propriétés favorables au matériel, et pas seulement l'ordre alphabétique.

Pièges courants

  1. Confondre le chiffre 0 avec le caractère de contrôle NUL. NUL est le code 0 ; le caractère « 0 » est le code 48. Les deux ne sont interchangeables dans aucun langage de programmation.
  2. Supposer qu'un octet est un caractère. Vrai uniquement pour le texte ASCII. Le texte UTF-8 a des caractères de largeur variable, de sorte que la longueur en octets et le nombre de caractères peuvent diverger énormément pour les écritures non latines.
  3. Mélanger les fins de ligne dans un même fichier. Un mélange de CR / LF / CRLF dans le même fichier déroute de nombreux analyseurs et produit des lignes vides fantômes ou des sauts de ligne manquants selon le système d'exploitation qui l'ouvre.
  4. Erreur de décalage d'une unité dans la terminaison des chaînes en C. Oublier que les chaînes ont besoin d'un octet supplémentaire pour le NUL final est la vulnérabilité de dépassement de tampon originelle.
  5. Supposer que l'« ASCII étendu » est portable. Les codes 128-255 désignent des caractères différents sous Latin-1, Windows-1252, KOI8-R, Mac Roman, etc. L'UTF-8 est le seul choix moderne sûr.
  6. ESC intégré dans une entrée non fiable. Si vous journalisez des données fournies par l'utilisateur vers un terminal sans les assainir, un attaquant peut injecter des séquences d'échappement ANSI qui changent la couleur, déplacent le curseur ou effacent l'écran, masquant parfois du contenu malveillant.

Foire aux questions

Pourquoi DEL a-t-il le code 127 plutôt que 0 ?

Parce que 127 en binaire est 1111111 : les sept bits à 1. Pour supprimer un caractère sur bande de papier perforée, l'opérateur reculait la bande et appuyait sur RUB OUT, ce qui perforait chaque trou existant. Le récepteur était censé ignorer tout octet entièrement composé de 1, de sorte que le caractère « supprimé » devenait invisible lors des lectures suivantes. La convention a été héritée de codes de téléscripteur antérieurs.

Qu'est-ce que l'« ASCII étendu » et son utilisation est-elle sûre ?

L'ASCII standard couvre les points de code 0-127 (7 bits). L'« ASCII étendu » désigne vaguement les encodages 8 bits qui remplissent les points de code 128-255 avec des caractères supplémentaires : Latin-1, Windows-1252, KOI8-R, Mac Roman et bien d'autres. Le hic : les caractères supplémentaires signifient des choses différentes dans chaque encodage. Le nom est techniquement un abus de langage (ces pages de code ne sont pas des extensions de la norme ASCII), et ils ne sont pas sûrs d'un système à l'autre. L'UTF-8 est le remplacement moderne et portable, et il est rétrocompatible avec la plage originale 0-127.

Pourquoi l'espace (32) est-il considéré comme « imprimable » s'il n'affiche rien ?

Parce qu'il occupe un espace horizontal sur une ligne imprimée, il fait avancer la tête d'impression exactement comme le fait une lettre. Les caractères de contrôle, en revanche, changent l'état de l'appareil sans produire de sortie visible (BEL émet un bip, BS recule la tête, LF fait avancer le papier). La classification repose sur ce que fait le caractère sur une imprimante, et non sur le fait qu'il possède ou non un glyphe.

CR et LF sont-ils la même chose que la touche Entrée de mon clavier ?

Le plus souvent oui, mais l'octet généré par votre clavier dépend du système d'exploitation. Sous Windows, appuyer sur Entrée produit généralement CRLF (0x0D 0x0A) ; sous Linux et macOS moderne, seulement LF (0x0A) ; sous Mac OS classique d'avant X, seulement CR (0x0D). De nombreux éditeurs normalisent cela à l'enregistrement, en fonction des fins de ligne existantes du fichier ou de la convention de projet configurée.

Pourquoi les séparateurs de fichier/groupe/enregistrement/unité sont-ils ici ?

Ils ont été conçus pour le stockage sur bande orienté enregistrement dans les années 1960, fichier > groupe > enregistrement > unité. Ils sont largement tombés en désuétude, mais ils sont revenus à deux endroits surprenants : la RFC 7464 « JSON Text Sequences » (type de média application/json-seq) utilise RS (0x1E) comme préfixe pour délimiter les enregistrements JSON en flux, et le séparateur d'identifiant d'application GS1 dans les protocoles de codes-barres du commerce de détail utilise GS (0x1D).

L'ASCII est-il encore pertinent en 2026 ?

Très. Tout protocole moderne « fondé sur le texte » (en-têtes HTTP, JSON, YAML, code source, arguments de ligne de commande, variables d'environnement, noms d'hôtes DNS) fonctionne dans la plage ASCII. L'UTF-8 est l'encodage dominant pour le texte arbitraire, mais les 128 premières valeurs d'octet de l'UTF-8 sont exactement l'ASCII, octet pour octet. Connaître la table reste nécessaire pour tout, de l'encodage d'URL à la couleur du terminal en passant par le débogage des bogues d'encodage de texte.

Outils associés

Convertisseur binaire vers texte, gratuit Convertisseur de bases numériques, gratuit Encodeur / décodeur d'entités HTML, gratuit Détecteur de keycode JavaScript, gratuit