Code ASCII

Les 128 codes ASCII en décimal, hexadécimal, octal et binaire, avec l'entité HTML et l'échappement JS. Plus bas, la plage 128 à 255 de Windows-1252 et les codes Alt pour taper @, é, ç et d'autres caractères au clavier.

Accepte le caractère, le code en décimal, en hexa (0x41 ou 41h), U+0041 ou le nom. La recherche porte sur les deux tables.
Colonnes

Cliquez sur une cellule pour copier sa valeur.

Codes Alt sous Windows

Maintenez Alt et tapez le nombre sur le pavé numérique (la rangée de chiffres du haut ne marche pas). Sans zéro devant, Alt+NNN utilise la CP850, la page de codes de la console Windows en français, espagnol, portugais et allemand (aux États-Unis, c'est la CP437). Avec un zéro devant, Alt+0NNN utilise Windows-1252.

Codes Alt des caractères les plus recherchés
CaractèreAlt+NNN (CP850)Alt+0NNN (Windows-1252)
n'existe pas

Ce qu'est l'ASCII

L'ASCII est une table de 128 codes, de 0 à 127, qui utilise 7 bits par caractère. Elle est née dans les années 1960 comme norme américaine (ANSI X3.4) et elle est décrite dans la RFC 20. On y trouve les lettres sans accent, les chiffres, la ponctuation et 33 caractères de contrôle qui ne s'affichent pas à l'écran.

Tout ce qui dépasse 127 n'est plus de l'ASCII, même quand on parle d'"ASCII étendu".

Les caractères de contrôle qu'on croise encore tous les jours

Parmi les 33 caractères de contrôle, la plupart sont tombés en désuétude, mais quelques-uns reviennent chaque semaine. NUL (0) marque la fin d'une chaîne en C et apparaît dans les fichiers binaires. TAB (9) est la tabulation. LF (10) et CR (13) forment le saut de ligne : Linux et macOS utilisent seulement LF, Windows utilise la paire CR et LF (CRLF). ESC (27) ouvre les séquences de couleur du terminal, et DEL (127) est le seul contrôle hors de la plage 0 à 31.

Cette différence de saut de ligne cause de vrais bugs, comme un script shell qui ne s'exécute pas à cause d'un CR en fin de ligne. Git peut convertir au commit et au checkout selon core.autocrlf : true sous Windows et input sous Mac et Linux règle en général le problème. Dans un CSV, un saut de ligne à l'intérieur d'un champ n'est bien lu que si le champ est entre guillemets.

git config --global core.autocrlf input

Il n'existe pas un seul "ASCII étendu"

Quand on parle d'"ASCII étendu", on pense presque toujours à l'une de trois tables : ISO-8859-1, Windows-1252 ou CP850. Elles coïncident de 0 à 127 et diffèrent au-delà. Et le navigateur ne traite même pas "latin1" comme de l'ISO-8859-1 : selon l'Encoding Standard du WHATWG, "latin1", "iso-8859-1" et même "ascii" sont lus comme du Windows-1252.

L'ISO-8859-1 (de 1987) utilise 128 à 159 pour des contrôles C1, que personne ne tape. Windows-1252 met des symboles utiles dans ces 32 codes, comme €, “ ”, … et •, et n'en laisse que cinq vides. La CP850 est autre chose : c'est la page de codes de la console Windows et des codes Alt, et là le "ç" vaut 135, pas 231.

Quand il vous faut l'une de ces tables, donnez son nom. "ASCII" ne va que jusqu'à 127.

ASCII, Unicode et UTF-8

Unicode est la liste de tous les caractères, et UTF-8 est la façon la plus courante de les stocker en octets. De 0 à 127, UTF-8 utilise un octet de même valeur que l'ASCII, donc un fichier uniquement ASCII est identique dans les deux. Au-delà, chaque caractère prend de 2 à 4 octets : une lettre accentuée en prend 2, un symbole comme € en prend 3 et un emoji en prend 4.

Cela compte quand la limite est en octets, comme une colonne de base de données ou un header. Le Compteur de Caractères et de Mots affiche les deux nombres côte à côte. En JavaScript, notez que length compte des code units, pas des caractères ni des octets :

"ç".length                             // 1
new TextEncoder().encode("ç").length   // 2
"😀".length                            // 2
new TextEncoder().encode("😀").length  // 4

Pourquoi le "ç" devient "ç"

Le "ç" en UTF-8 occupe deux octets, C3 et A7. Si un programme lit ces octets comme du Windows-1252, chaque octet devient un caractère : C3 est "Ã" et A7 est "§". D'où le "ç" à la place du "ç". Presque toujours, l'un des deux bouts est mal configuré : la base en latin1, le CSV enregistré sans BOM, le header Content-Type sans charset ou le fichier enregistré en "ANSI".

Les causes les plus courantes :

  • Une table MySQL en latin1 au lieu de utf8mb4. La donnée entre bien et sort mal, ou l'inverse.
  • Un CSV en UTF-8 ouvert dans Excel sans BOM. Excel suppose la page de codes de Windows et affiche du mojibake.
  • Une réponse HTTP sans charset dans le header Content-Type. Le navigateur devine l'encodage.
  • Un fichier enregistré en "ANSI", qui sous Windows en français correspond à Windows-1252.
  • btoa n'accepte que des caractères jusqu'à 255. btoa("€") lève InvalidCharacterError, et btoa("é") fonctionne mais encode l'octet E9 (latin1), pas C3 A9 (UTF-8). Pour du Base64 d'UTF-8, convertissez d'abord en octets. Le Décodeur Base64 le fait.
btoa("€");                                              // InvalidCharacterError
btoa("ç");                                              // "5w==" (byte E7)
btoa(String.fromCharCode(...new TextEncoder().encode("ç"))); // "w6c=" (bytes C3 A7)
ALTER TABLE clientes CONVERT TO CHARACTER SET utf8mb4;

Le hash a le même problème : le SHA-256 de "ç" n'est pas le même en latin1 (octet E7) et en UTF-8 (octets C3 A7). Si un hash ne correspond pas à celui d'un autre système, vérifiez l'encodage du texte dans le Générateur de Hash.

L'ASCII dans le code

La table explique des astuces présentes dans toutes sortes de code. Majuscules et minuscules diffèrent de 32 (un seul bit), et les chiffres "0" à "9" occupent 48 à 57, donc c - '0' en C ou Java transforme le caractère en nombre. En regex, [ -~] capture les imprimables, de l'espace (32) au tilde (126).

"a".charCodeAt(0) - "A".charCodeAt(0); // 32
"7".charCodeAt(0) - "0".charCodeAt(0); // 7
/^[ -~]*$/.test("Olá");                // false
"B".charCodeAt(0) - 48;                // 18

Le CNPJ alphanumérique brésilien reprend la même idée. Pour calculer le chiffre de contrôle, chaque caractère vaut son code ASCII moins 48 : "0" à "9" valent toujours 0 à 9, "A" vaut 17, "B" vaut 18 et ainsi de suite jusqu'à "Z", qui vaut 42. Pour le voir à l'œuvre, utilisez le Générateur de CNPJ ou vérifiez un numéro dans le Validateur de CNPJ.

Entités HTML et échappements

En HTML, une entité n'est nécessaire que pour les caractères que le parser lit comme du balisage : &, < et >, plus " dans un attribut.   est l'espace insécable, le code 160, et il n'est pas identique à l'espace normal (32).

Avec la page en UTF-8, accents et symboles peuvent aller directement dans le HTML : pas besoin de é ni de é. En JavaScript et en JSON, l'échappement \u00e9 sert quand le fichier n'est pas en UTF-8, et \n, \t et \ sont les formes courtes. Dans une URL, le "é" devient %C3%A9, ses octets UTF-8.

Codes Alt sous Windows

Le code Alt n'est pas de l'ASCII. Alt+NNN, sans zéro, utilise la CP850 sous Windows en français, espagnol, portugais et allemand : Alt+130 tape le "é" et Alt+64 tape l'arobase. Alt+0NNN, avec un zéro devant, utilise Windows-1252 : Alt+0233 tape le même "é". Le nombre change parce que la table change.

Tapez toujours sur le pavé numérique, avec Verr Num activé. Sur un portable sans pavé numérique, le plus simple est de copier le caractère depuis la table ci-dessus.

Sources

Vérifiées le 3 novembre 2026 :