L' (Code américain normalisé pour l'échange d'information), plus connu sous l'acronyme ASCII, prononcé en français , est une norme informatique d'encodage de caractères. Elle est apparue dans les années 1960. Elle contient 128 points de code codés sur et permet d'encoder les chiffres arabes de 0 à 9, les de l'alphabet latin en minuscules et en capitales, des symboles mathématiques et de ponctuation.
ASCII est la norme de codage de caractères la plus influente à ce jour. Elle suffit pour représenter les textes en anglais, mais elle est trop limitée pour les autres langues, dont le français et ses lettres accentuées. De nombreuses normes informatiques ont été fondées sur ASCII, ce qui fait que les limitations de son jeu de caractères sont encore sensibles au , par exemple dans le choix restreint de caractères généralement offert pour composer une adresse électronique et une adresse web.
L'ASCII est une des variantes de la norme ISO/CEI 646. Les caractères étant codés sur , il est impossible d'avoir un point de code ASCII supérieur à 127 (en décimal, soit 0x7F en hexadécimal, et \177 en octal – selon des notations habituelles). Des valeurs supérieures à 127 existent dans des extensions de l'ASCII, qui sont parfois informellement appelées ASCII étendu. Il existe plusieurs dizaines de normes étendant ASCII : régionales (ISO/CEI 8859), nationales (GB 18030) ou internationales (Unicode).
Histoire vignette|Table ASCII dans un manuel d'imprimante de 1972. Avant la standardisation, de nombreux codages de caractères incompatibles entre eux existaient. 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 les cartes perforées.
En 1960, l'ISO a créé le Technical Committee on Computers and Information Processing. (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 consortium (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, dont Minneapolis-Honeywell. Ce groupe a formé un , qui à son tour a formé l'. L' a formé le comité X3, qui a été reconnu par l'ASA comme . 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.
En 1961, le DoD met au point un code standard de transmission de donnée sur Appendix §A.6.8 de la norme de A963. Ce standard est une variante des standards FIELDATA sixbits 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.
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 norme ISO/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 registre IANA 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 ses mainframes 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'ASCIICaractères, codage et normalisation, De Chappe à Unicode, Jacques André, 2002.
Principes L'ASCII définit numérotés de 0 à 127 et codés en binaire de 0000000 à 1111111. suffisent donc. Toutefois, les ordinateurs travaillant presque tous sur un multiple de huit bits (un octet) depuis les années 1970, chaque caractère d'un texte en ASCII est souvent stocké dans un octet dont le est 0. Aujourd'hui encore, certains systèmes de messagerie électronique et de SMS fonctionnent avec des bytes ou multiplets composés de seulement sept bits (contrairement à un octet qui est un byte ou multiplet standardisé à huit bits).
Les caractères de numéro 0 à 31 et le 127 ne sont pas affichables ; ils correspondent à des commandes de contrôle de terminal 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 les chiffres arabes, les lettres latines majuscules et minuscules sans accent, des symboles de ponctuation, des opérateurs mathématiques et quelques autres symboles.
Limitations 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'autres encodages.
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 dans Unicode où ces signes sont dans un bloc disjoint des autres symboles similaires, se trouvant pour la plupart codés à partir de U+2000Unicode 5.0 en pratique, chapitre 7 « Ponctuation », Patrick Andries..
Internationalisation 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 (famille ISO/CEI 2022) ainsi que des extensions où un caractère est codé sur plusieurs octets ; l'utilisation du standard Unicode (famille ), 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 certains algorithmes de recherche manquent d'interopérabilité à cet égard.
Standardisation 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.
Les standards ASCII 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 : Norme ISO/CEI 646 : ISO/CEI 646-US Variante des États-Unis, Variante IRV internationale ; Code page IBM 367 ; Alphabet International de Référence : Alphabet International de Référence (de 1988), Alphabet International de référence (dans le jeu G0 de l'IRV).
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.
Approximation, variantes et extensions Norme ISO/CEI 646 Variante INV invariable (incomplète par rapport aux deux précédentes).
Trois types de codages de caractères se rapprochent de l'ASCII : ceux qui ne changent que par la dénomination — ils sont essentiellement identiques à l'ASCII ; ceux qui sont des variantes, l'ASCII étant à l'origine la variante locale aux États-Unis de l'ISO/CEI 646 ; ceux qui l'augmentent, dits extensions.
Alias En , le . et la chambre d'enregistrement de jeux de caractères Internet Assigned Numbers Authority ont reconnu les alias suivants, insensibles à la casse, convenables pour l'utilisation dans des protocoles Internet :
L'IANA promeut plus particulièrement la dénomination « US-ASCII » pour Internet.
Variantes
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. Outre ISO/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 puces Motorola 6847 (VDG) et du GIME, qui équipaient les adapteurs vidéo du TRS-80 Color Computer et d'autres anciens ordinateurs des années 1980. Mais plusieurs années plus tôt, les ordinateurs Xerox équipés du langage de programmation Smalltalk incluaient les mêmes deux caractères (en mode 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 le TRS-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.