L'ASCII est une des variantes de la normeISO/CEI 646. Les caractères étant codés sur7 bits, il est impossible d'avoir un point de code ASCII supérieur à 127 (en décimal, soit 0x7F enhexadécimal, et \177 enoctal – selon des notations habituelles). Des valeurs supérieures à 127 existent dans des extensions de l'ASCII, qui sont parfois informellement appeléesASCII étendu. Il existe plusieurs dizaines de normes étendant ASCII : régionales (ISO/CEI 8859), nationales (GB 18030) ou internationales (Unicode).
Avant la standardisation, de nombreux codages de caractères incompatibles entre eux existaient[1]. Chaque matériel avait son propre codage, lié aux techniques qu'il utilisait. Tout ordinateur, comme l'IBM 1130, était livré avec ses sous-programmes et ses tables permettant de transposer les codes d'un matériel à un autre. D'autres standards, comme l'EBCDIC d'IBM, étaient utilisés, notamment pour lescartes perforées[2],[3].
En 1960, l'ISO a créé leTechnical Committee on Computers and Information Processing[4] (Comité technique pour les ordinateurs et le traitement de l'information). Il a été divisé en six groupes de travail A à F :
A : Glossaire ;
B : Jeux et codages des caractères ;
C : Reconnaissance des caractères ;
D : Supports d'entrée et de sortie ;
E : Langages de programmation ;
F : Transmission de données numériques.
L'American Standards Association (ASA, aujourd'hui ANSI) était chargée du standard desÉtats-Unis. L'ASA a reconnu le consortiumBusiness Equipment Manufacturers Association (BEMA, puis, CBEMA) comme le parrain du travail de standardisation du traitement des données. En 1960, BEMA a formé un groupe de traitement des données des partenaires, dontMinneapolis-Honeywell. Ce groupe a formé unPlans and Policies Committee, qui à son tour a formé l'Engineering Committee. L'Engineering Committee a formé le comité X3, qui a été reconnu par l'ASA commeSectional Committee. Parmi les membres du comité,Bob Bemer est parfois présenté comme « père de l'ASCII », ce qu'il ne faut pas comprendre comme inventeur de l'ASCII, mais comme grand artisan de la diffusion d'ASCII[5].
En 1961, leDoD met au point un code standard de transmission de donnée sur8 bits[6]. Ce standard8 bits est une variante des standardsFIELDATAsixbits utilisés dans la décennie précédente par la défense. Il a eu une influence notable sur la première version de l'ASCII.
En 1963, la première version publiée de l'ASCII apparaît. La liste des caractères à considérer et leur position ont été débattues[7].
Sa dernière version stabilisée a été normalisée par l'ANSI en 1986 sous la désignation ANSI X3.4:1986 (après deux autres versions en 1967 et 1968, historiquement normalisées par l'ASI, devenu ANSI mais qui ne normalisait pas encore toutes les positions). C'est également la variante américaine des jeux de caractères codés selon la normeISO/CEI 646 avec laquelle on la confond souvent (d'où sa désignation également comme US-ASCII pour lever l'ambigüité, désignation préférée dans le registreIANA des jeux de caractères codés).
À l'époque elle a été en concurrence avec des standards incompatibles. Par la suite, l'existence de nombreux codages reprenant les conventions de l'ASCII l'a rendu très populaire.IBM, qui utilisait sur sesmainframes un autre codage, l'EBCDIC, ne commença à utiliser officiellement l'ASCII sur ses matériels qu'avec l'IBM PC, en 1981.
En 1983, la France abandonne la norme Z62010 au profit de l'ASCII[8].
Les caractères de numéro 0 à 31 et le 127 ne sont pas affichables ; ils correspondent à des commandes de contrôle determinal informatique. Le caractère numéro 127 est la commande pour effacer. Le caractère numéro 32 est l'espace. Le caractère 7 provoque l'émission d'un signal sonore. Les autres caractères sont leschiffres arabes, leslettres latinesmajuscules etminuscules sans accent, des symboles deponctuation, desopérateurs mathématiques et quelques autres symboles.
L'absence des caractères des langues étrangères à l'anglais rend ce standard insuffisant à lui seul pour des textes étrangers (par exemple en langue française), ce qui rend nécessaire l'utilisation d'autresencodages.
Lorsqu'il est employé seul pour la langue anglaise, il interdit l'usage des accents dans la langue anglaise.
Quelques-uns des caractères graphiques ASCII ont provoqué une polysémie. Ceci est en tout ou partie lié au nombre limité de codets dans un jeu à sept bits. Ceci se retrouve notamment dans les symboles de ponctuation et l'utilisation des guillemets. L'ASCII a été conservé parce qu'il est omniprésent dans de nombreux logiciels. Cet héritage se retrouve dansUnicode où ces signes sont dans un bloc disjoint des autres symboles similaires, se trouvant pour la plupart codés à partir de U+2000[9].
Les limites du standard américain ASCII ont conduit, sur trois périodes différentes, à trois approches de l'internationalisation :
l'utilisation de standards régionaux à caractères mesurant un octet, techniquement les plus faciles à mettre en place ;
l'utilisation de standards extensibles, où un même octet peut représenter un caractère différent suivant le contexte (familleISO/CEI 2022) ainsi que des extensions où un caractère est codé sur plusieurs octets ;
l'utilisation du standardUnicode (familleUTF), qui est celui qui comprend le plus grand nombre de caractères.
Les standards régionaux à caractères mesurant un octet ont l'inconvénient de ne permettre la représentation que d'un ensemble réduit de caractères, comme les caractères d'Europe occidentale. Avec cette approche, l'encodage doit être donné par le contexte.
Les standards extensibles ont l'inconvénient d'être contextuels. Il se peut que des logiciels utilisant certainsalgorithmes de recherche manquent d'interopérabilité à cet égard.
Le jeu de codage ASCII est défini quasiment identiquement par plusieurs standards différents, a de nombreuses variantes et a donné naissance à une foison (des dizaines ou des centaines) d'extensions plus ou moins incompatibles entre elles.
Les principales extensions sont justifiées par le fait que l'ASCII ne répond pas aux divers besoins régionaux. Elles sont proposées par des organismes de normalisation, ou par des fournisseurs de produits et de services.
Note : ne pas confondre USASI X3.4-1968 ou ANSI X3.4-1968 et ANSI X3.4:1986.
Standards ASCII des États-Unis (les standards hérités, et le standard en vigueur) :
ASA X3.4-1963, (incomplet avec 28 positions libres, et un code de commande non assigné) ;
USASI X3.4-1967 (renommé rétroactivement ANSI X3.4-1967), qui ne normalisait pas encore toutes les positions ;
USASI X3.4-1968 (renommé rétroactivement ANSI X3.4-1968), qui ne normalisait pas encore toutes les positions ;
ANSI X3.4-1977 ;
ANSI X3.4:1986 (en 1986, et en vigueur aujourd'hui).
Les standards internationaux suivants sont généralement considérés compatibles (quasi identiques) avec le standard ASCII en vigueur de 1986 à 2011, tout en constituant une normalisation internationale officielle :
La désignation US-ASCII, ASCII É-U ou ASCII des États-Unis est un mélange des désignations précédentes. Le registre IANA lui attribue la dénomination US-ASCII, sans en définir le codage.
En, leRFC 1345[12][13] et la chambre d'enregistrement de jeux de caractèresInternet Assigned Numbers Authority[14] ont reconnu les alias suivants, insensibles à la casse, convenables pour l'utilisation dans des protocoles Internet :
ASCII a donné naissance à certaines variantes qui conservent la plupart des caractères, mais en remplacent une partie. Dès lors, il ne s'agit plus d'ASCII à strictement parler. OutreISO/CEI 646, on trouve d'autres variantes dans l'histoire de l'informatique. Par exemple, le circonflexe (#94) est remplacé par la flèche vers le haut et le soulignement (#95) est remplacé par la flèche vers la gauche, dans l'ensemble de caractères intégré des pucesMotorola 6847 (VDG) et du GIME, qui équipaient les adapteurs vidéo duTRS-80 Color Computer et d'autres anciens ordinateurs des années 1980. Mais plusieurs années plus tôt, les ordinateursXerox équipés du langage de programmationSmalltalk incluaient les mêmes deux caractères (enmode graphique).
Par ailleurs, certains anciens ordinateurs n'étaient équipés que du deux tiers d'ASCII, c'est-à-dire les caractères 32 à 95 plutôt que 32 à 126. C'est alors à proprement parler une variante à 6 bits. Sur leTRS-80 Color Computer, on mettait dans les fichiers les codes 32 à 127, mais ceux de 96 à 127 étaient des versions en couleurs inversées (vert sur noir plutôt que noir sur vert). Ces blocs de 32 caractères étaient échangés au moment d'envoyer au VDG, pour lequel les codes ASCII 32 à 63 étaient numérotés 96 à 127, tandis que les 0 à 63 étaient en couleurs inversées (en soustrayant 64). En outre, les codes 128 à 255 encodaient des formes de blocs en couleurs. Le GIME était capable de fonctionner soit comme le VDG, soit en mode ASCII, avec circonflexe #94, soulignement #95. Il avait aussi en option sa propre extension 8-bit pour les lettres accentuées minuscules et majuscules, compatible avec probablement aucun autre ordinateur.
Certaines extensions 7-bit ont un caractère #127, comme les premiers Apple, qui y avaient un quadrillé, et les cartes vidéo PC (Page de code 437) qui y avaient une sorte de pentagone, en plus de remplir les cases 0 à 31 de flèches, cercles et signes divers. Naturellement, on ne pouvait pas utiliser ces codes dans les contextes où ils avaient une signification de contrôle ; et inversement, lorsque des codes de contrôle n'étaient pas interprétés comme tels, comme quand le #27 est censé signifier commencer une séquenceVT100 (ANSI.SYS) mais apparaît comme une flèche vers la gauche (par exemple,[1]).
Par abus de langage, on appelle souvent « ASCII » des normes qui étendent l'ASCII, mais qui ne sont pas compatibles entre elles (et parfois même ne sont pas compatibles sur leurs 128 premiers caractères codés). En particulier, les standardsWindows-1252 (couramment utilisé surMicrosoft Windows dans les pays occidentaux),ISO/CEI 8859-1 (couramment utilisé surInternet etUnix) et lespages de code pour PC numéro437 et850 (couramment utilisées surDOS) ne sont pas la norme ASCII. Cet abus de langage ne va pas sans causer des confusions causant des incompatibilités, souvent rendues visibles par le fait que les caractères non ASCII comme les « lettres accentuées » (éÈç) s'affichent mal. On écrit parfois « ASCII de base » pour différencier l'ASCII d'un standard plus étendu.
Extensions asiatiques, à base de séquences d'échappement
Afin d'unifier les différents codages de caractères complétant l'ASCII et y intégrer les codages complètement différents (leJIS pour lejaponais par exemple, qui bien que développé aussi sur la base de l'US-ASCII, en diffère dans l'assignation d'un des 128 premierscodets), la normeISO/CEI 10646 a été inventée (et aussi développée au départ séparément par le Consortium Unicode dans une version de sa normeUnicode 1.0 initialement incompatible avec ISO/CEI 10646).
La version 1.0 a été abandonnée depuis la version 1.1 afin d'unifier et fusionner les deux répertoires dans un jeu universel de caractères codés. ISO/CEI 10646 codifie des dizaines de milliers de caractères, mais les 128 premiers restent compatibles avec ASCII (dans sa dernière version X3.4-1986) ; la norme Unicode y ajoute des sémantiques supplémentaires. Dans la norme Unicode, le standard ASCII est défini sous le nom de « C0 Controls and Basic Latin ».
Toutefois, certains pays d'Asie orientale (laRépublique populaire de Chine, les anciens dominions britannique et portugais en Chine, deHong Kong etMacao, qui sont devenus depuis des régions administratives spéciales de Chine, laRépublique de Chine àTaïwan, et leJapon) ont choisi de continuer à développer leur propre norme pour coder le jeu de caractères universel, tout en choisissant de les maintenir entièrement convertibles avec l'ISO/CEI 10646 ; parmi ces normes asiatiques, seule la norme nationale japonaise continue à maintenir une différence dans ses 128 premières positions avec le jeu ASCII, en codant le symbole monétaire duyen à la place de labarre oblique inversée (comme c'est aussi le cas dans la variante japonaise de la normeISO/CEI 646).
L'ASCII a eu une influence importante dans le monde informatique. En particulier, il a longtemps limité les caractères disponibles aux caractères latins non accentués, notamment dans le monde de l'Internet, que ce soit pour les noms de domaine, les adresses de courrier électronique, les caractères disponibles dans le BIOS, ou les caractères dans lesquels peuvent être écrits des programmes informatiques.
La norme ANSI s'est efforcée de régler les problèmes liés à la disparité des séquences de contrôles d'écran sur les différents terminaux informatiques des années 1970, en prescrivant une liste decommandes primitives accessibles sur tous les terminaux, dont les arguments numériques devaient être codés avec les codes ASCII des chiffres. La première des normes ANSI de ce genre est ECMA-48, adoptée[16] en 1976. Ainsi, presque tous les terminaux ou émulateurs reconnaissaient, au milieu des années 1980, desséquences d'échappement ANSI : cela a ouvert l'accès aux terminaux et PC à de nombreux jeux et applicatifs grâce aumode semi-graphique.
On peut présenter la table des caractères ASCII sous une forme condensée qui met en évidence une organisation fondée sur la base 16. Les 32 premiers codes et le code 127 représentent chacun uncaractère de contrôle non imprimable. Le code 32 représente l'espace. Le nom abrégé en anglais de ces caractères est présenté dans ce tableau.
ASCII réserve les 32 premiers codes (nombres décimaux de 0 à 31) pour lescaractères de contrôle : codes destinés non à représenter des informations imprimables, mais plutôt à contrôler despériphériques (tels que desimprimantes) qui utilisent ASCII ou à fournir desméta-informations sur les flux de données, tels que ceux stockés surbande magnétique.
Null : nul. Il est à l'origine uneNOP, c'est-à-dire un caractère à ignorer. Lui donner le code 0 permettait de prévoir des réserves sur lesbandes perforées en laissant des zones sans perforation pour insérer de nouveaux caractèresa posteriori. Avec le développement dulangage C, il a pris une importance particulière quand il a été utilisé comme indicateur de fin dechaîne de caractères.
Start of Heading : début d'en-tête. Il est aujourd'hui souvent utilisé dans les communicationsséries pour permettre la synchronisation après erreur[24].
Delete : effacement. Lui donner le code 127 (1111111 en binaire) permettait de supprimera posteriori un caractère sur les bandes perforées qui codaient les informations sur 7 bits. N'importe quel caractère pouvait être transformé en DEL en complétant la perforation des 7 bits qui le composaient.
Line Feed : saut de ligne,Carriage Return : retour chariot. Dans unfichier texte, lafin d'une ligne est représentée par un ou deux caractères de contrôle. Plusieurs conventions existent :
sur les machinesAppleII etMac OS jusqu'à la version 9, la fin de ligne est indiquée par un retour chariot (CR) ;
sur les systèmesDEC,RT-11 et généralement tous les premiers systèmes non-Unix et non-IBM,CP/M,MP/M,MS-DOS,OS/2 ouMicrosoft Windows, la fin de ligne est indiquée par un retour chariot suivi d'un saut de ligne (CR suivi de LF).
Ainsi, lorsqu'on transfère un fichier ASCII entre des systèmes ayant des conventions de fin de ligne différentes, il faut convertir les fins de ligne pour pouvoir manipuler le fichier confortablement sur le système cible. Autrement, il faut utiliser un éditeur de texte capable de gérer les diverses conventions de fin de ligne, ce qui n'est par exemple pas le cas du classiqueBloc-notes deMicrosoft Windows. Les programmes utilisant les fichiers ASCII ne sont en général pas perturbés par un changement de type de fin de ligne.
Substitute : remplacement. Il est souvent associé à la combinaison de touches Ctrl + z et est utilisé dans les communications séries pour permettre l'envoi des données en lieu et place de la touche entrée.
Le code 20hex, le caractèreespace, désigne l'espace entre les mots, tel que produit par labarre d'espace d'un clavier. Le caractère espace étant considéré comme un graphique invisible (plutôt que comme caractère de contrôle[25]:223,[26]), il est répertorié dans le tableau ci-dessous et non dans la section précédente.
Le code 7Fhex correspond aucaractère d'effacement (DEL) n'est pas imprimable et est donc omis de ce tableau. Il est inclus dans le tableau de la section précédente.
↑Il n'y a pas de dénomination absolue des caractères ASCII. Avant l'internationalisation de l'ASCII (avant 1983 en France) certaines traductions existent (exemple: norme de 1992[11] etRFC 20[17] traduction De L'Isle[18]). L'usage peut avoir retenu différentes appellations pour un même caractère. Certaines publication de tables ASCII ne donnent aucun nom. Des normes officielles donnent le cas échéant des noms de caractères, mais elles sont méconnues en raison de leur coûts[19]. D'autres donnent des noms d'usage (par exemple thierry-lequeu[20] ou ionos[21]). Par ailleurs, de nombreux ouvrages en langue française ont publié une dénomination des tables ASCII (fabricant d'imprimantes, d'ordinateur, livre de programmation, etc). Unicode est supposé reprendre des caractères ASCII à l'identique mais le rajoutant de nouveaux caractères similaires (apostrophe, par exemple) induit de subtiles différences. Enfin, Unicode ne donne pas les noms d'usage.
↑Les caractèresUnicode de la zone U+2400 à U+2421 sont réservés pour représenter les caractères de contrôle quand il est nécessaire de les imprimer ou de les afficher plutôt que de les laisser jouer leur fonction prévue. Certains navigateurs peuvent ne pas les afficher correctement.
↑Lecaret est souvent utilisé pour représenter les caractères de contrôle sur un terminal. Sur la plupart des terminaux texte, tenir enfoncée la toucheCtrl tout en tapant le second caractère imprimera le caractère de contrôle. Parfois la touche majuscule n'est pas utile, par exemple^@ peut être tapé avec seulement Ctrl et 0.
↑Séquences d'échappement enC et dans beaucoup d'autres langages influencés par lui, tels queJava etPerl (bien que toutes les implémentations ne supportent pas nécessairement toutes les séquences d'échappement).
↑Le caractèreBackspace peut aussi être entré en appuyant sur la toucheBackspace de certains claviers.
↑a etbL'ambiguïté deBackspace est due aux premiers terminaux conçus en supposant que l'utilisation principale du clavier serait de perforer manuellement la bande de papier sans être connecté à un ordinateur. Pour supprimer le caractère précédent, il fallait sauvegarder le poinçon de bande de papier, qui pour des raisons mécaniques et de simplicité était un bouton sur le poinçon lui-même et non le clavier, puis taper le caractère d'effacement. Ils ont donc placé une clé produisant un effacement à l'emplacement utilisé sur les machines à écrire pour le retour arrière. Lorsque les systèmes utilisaient ces terminaux et fournissaient une édition en ligne de commande, ils devaient utiliser le coderubout pour effectuer un retour arrière et n'interprétaient souvent pas le caractère de retour arrière (ils pouvaient faire écho à^H pour revenir en arrière). D'autres terminaux non conçus pour la bande de papier ont fait la clé à cet endroit pour produire Backspace, et les systèmes conçus pour ceux-ci ont utilisé ce caractère pour sauvegarder. Étant donné que le code de suppression produit souvent un effet de retour arrière, cela oblige également les fabricants de terminaux à faire en sorte que n'importe quelle toucheDelete produise autre chose que le caractère Delete.
↑Le caractère de tabulation peut aussi être entré en appuyant sur latouche de tabulationTab sur la plupart des claviers.
↑Le caractère de retour de chariot peut aussi être entré en appuyant sur latouche d'entrée (Entrée) sur la plupart des claviers.
↑Laséquence d'échappement\e ne fait pas partie des spécifications de l'ANSI C et de beaucoup d'autres langages. Cependant, elle est comprise par plusieurs compilateurs, dontGCC.
↑Lecaractère d'échappement peut aussi être entré en appuyant sur la toucheEsc de certains claviers.
↑^^ signifieCtrl + ^ (en appuyant sur les touches "Ctrl" etcaret).
↑Lecaractère d'effacement peut parfois être entré en appuyant sur la toucheBackspace sur certains claviers.
↑La norme ANSI X3.4 définit le caractère 39 parapostrophe (closing single quotation mark, acute accent) et lesanciennes tables de caractères le représentaient souvent incliné. Les encodages plus récents restreignent ce code à la représentation de l'apostrophe verticale (ni penchée à droite, ni à gauche, mais neutre). Voir(en)Latin-1's apostrophe, grave accent, acute accent.
↑Le code 96 est également employé commeguillemet ouvrant simple en ASCII. En Unicode, il existe un code plus approprié.