vignette|alt=Carte rectangulaire beige clair avec dans le sens de la longueur 10 lignes constituées chacune d'une suite de chiffre identique, de 1 à 10. Des perforations verticales font disparaître certains de ces chiffres|Carte perforée à 80 colonnes, sur laquelle est codé le texte de programmation « ».
En télécommunications et en informatique, un jeu de caractères codés est un code qui associe un jeu de caractères abstraits d’un ou plusieurs systèmes d’écriture (comme des alphabets ou des syllabaires) utilisés pour transcrire des langues naturelles avec une représentation numérique pour chaque caractère de ce jeu, ce nombre pouvant lui-même avoir des représentations numériques différentes.
Par exemple, le code Morse (qui associe l’alphabet latin à une série de pressions longues et de pressions courtes sur le manipulateur morse du télégraphe) ou le code ASCII (qui code les lettres, les chiffres et d'autres symboles en tant qu'entiers codés sur 7 bits) sont des jeux de caractères codés.
Il est indispensable, pour l'échange d'information sur Internet, par exemple, de préciser le codage utilisé. Ne pas le faire peut rendre un document difficilement lisible (remplacement des lettres accentuées par d'autres suites de caractères connu sous le nom de mojibake). Toutefois, la convergence vers un standard commun, telle que les normes UTF, devrait enfin répondre à ce problème.
Dans certains contextes (en particulier dans les communications et dans l'utilisation de données informatiques), il est important de distinguer un répertoire de caractères, qui est un jeu complet de caractères abstraits qu'un système supporte, et un jeu de caractères codés ou codage de caractères qui spécifie comment représenter un caractère en utilisant un entier.
Principe Le codage des caractères est une convention qui permet, à travers un codage connu de tous, de transmettre de l'information textuelle, là où aucun support ne permet l'écriture scripturale.
Cela consiste à représenter chaque caractère, par un motif visuel, un motif sonore, ou une séquence abstraite. Les techniques des ordinateurs reposent sur l’association d'un caractère à un nombre, et/ou à un ou plusieurs codets.
D'autres techniques permettent, en utilisant un jeu restreint de caractères, d'en coder un plus grand nombre, ou de coder des octets qui peuvent en coder un plus grand nombre, notamment les bien connus Quoted printable, Entité de caractère et Percent-encoding (défini par le ).
Différence entre jeu de caractères codés et forme de codage Le terme jeu de caractères codés est parfois confondu avec la façon dont les caractères sont représentés par une certaine séquence de bits, ce qui implique une forme de codage où le code entier est converti en un ou plusieurs codets (c’est-à-dire des valeurs codées) entiers qui facilitent le stockage dans un système qui gère les données par groupe de bits de taille fixe ou variable.
Par exemple, le codage morse utilise un codage ternaire, dont deux des trois codets (impulsion courte ou longue) sont utilisés en groupes pour coder chaque valeur codée, le troisième (une pause plus longue) étant utilisé pour séparer les caractères.
De même, les entiers plus grands que 65535 ne peuvent pas être représentés sur 16 bits, c'est pourquoi la forme de codage UTF-16 représente ces grands entiers comme des couples d’entiers inférieurs à 65536 mais qui ne sont pas associés isolément à des caractères (par exemple, U+10000 - en hexadécimal - devient la paire 0xD800 0xDC00). Ce plan de codage convertit alors les valeurs de ces codes en une suite de bits. Et ce, en prenant garde à un certain nombre de contraintes comme la dépendance vis-à-vis de la plateforme sur l'ordre final des octets (par exemple, D800 DC00 devient 00 D8 00 DC sur une architecture Intel x86). L'Unicode Technical Report #17 explique cette terminologie en profondeur et fournit davantage d'exemples.
Une page de code abrège ce procédé en associant directement aux caractères abstraits des séquences de bits spécifiques de taille fixe (généralement 7 ou 8 bits par caractère).
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-monooctets, 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 UTF), qui est celui qui comprend le plus grand nombre de caractères.
Les standards régionaux 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, il est nécessaire d'indiquer l'encodage à l'extérieur du flot.
Les standards ISO/CEI 2022 ont l'inconvénient d'être contextuels. Il se peut que des logiciels utilisant certains algorithmes de recherche manquent d'interopérabilité à cet égard.
Les formes de codage définies par le Standard Unicode ont l'inconvénient de la présence éventuelle de la fonctionnalité d'indicateur d'encodage en début de flot, qui le cas échéant est introduit par le caractère Byte Order Mark. Certains logiciels anciens ne sont pas compatibles avec la présence de ces trois octets, et ne pourront pas l'être en raison de la complexité conceptuelle que représente le fait de traiter ces trois octets. En particulier, certaines opérations deviennent plus complexes comme la concaténation de chaînes.
Historique Premiers codages de caractères "NON" 50px 50px 50px
Les premiers codages de caractères permettaient de s'affranchir de la distance. Ils utilisaient des techniques visuelles variées, mais ne codaient pas l'information sous forme binaire.
Code international des signaux maritimes. Il s'agit de transmission visuelle, basée sur une séquence de drapeaux. Télégraphe optique, par exemple le télégraphe Chappe en France à partir de 1794. Il s'agit de transmission visuelle par positionnement des bras du télégraphe dans différentes postures. Alphabet Morse (1838). Il a été inventé en 1832 pour la télégraphie. Il est basé sur des séquences courtes et des séquences longues. Le code de base permet de transmettre des textes non accentuées, mais n'est pas limité en longueur, rendant des extensions possibles. Le convertissait les textes chinois avec des pages de codes en séquences de quatre chiffre décimaux, chiffres transmis en Morse.
Codage par séquence de bits vignette|240px|redresse|Bande de papier avec des trous représentant les « code Baudot ».
Les premiers codages binaires de caractères furent introduits en France par l'ingénieur Mimault et par le code Baudot pour le Télex et aux États-Unis par des sociétés répondant aux appels d'offres de l'État fédéral. Pour le recensement puis des besoins particuliers.
En 1845, Highton utilisait un système basé sur les puissances de 2 : 1, 2, 4, 8, 16, 32, 64, 128, d'après un livre consacré à Émile Baudot.
En 1874, l'ingénieur Mimault a le premier breveté le principe de la progression géométrique 1, 2, 4, 8, 16, pour obtenir 31 combinaisons servant à coder un alphabet.
Code Baudot (1874) : 32 codes (5 bits). Il permettait de transmettre des caractères non accentués et ne servait que pour le Telex. Il permettait de transmettre les vingt-six lettres non accentuées, les dix chiffres, ainsi qu'une douzaine de symboles supplémentaires.
Vers 1901, le code Baudot original a été modifié par Donald Murray qui réorganisa les caractères, ajouta de nouveaux symboles, et introduisit les jeux de caractères.
Codage industriel, mécanique et télécommunications
droite|vignette|Carte du recensement de Hollerith (1890) En 1890, on répartit les perforations arbitrairement sur la carte (recensement Hollerith 1890)..
En raison de l'existence de brevets le codage Hollerith de IBM n'est pas utilisé par Bull. Ce manque d'interopérabilité fragmenta le marché entre « clients IBM » et « clients Bull ».
Vers le changement de siècle développement d'un codage performant sur cartes perforées pour le recensement étatique. Le produit fut ensuite commercialisé par le Tabulating Machine Co...
Western Union en utilisa une version modifiée jusque dans les années 1950. Avaient été rajoutées l'espace et la sonnerie. Dans les années 1930, le CCITT a introduit le International Telegraph Alphabet No. 2 (ITA2) code comme standard international, basé sur le code Western Union modifié. Les États-Unis ont standardisé une version de l'ITA2 comme American Teletypewriter code (USTTY) qui était une base de codes 5-bit teletypewriter jusqu'aux débuts de l'ASCII 7 bits en 1963.
Informatisation En 1948, Manchester Mark I, le premier ordinateur électronique, utilisait les principes du code Baudot.
RADIX-50 (1959) : 40 codes, stocke 3 caractères dans un mot de 16 bits en big endian (PDP-11). Il permet de stocker les dix chiffres, l'espace, vingt-six lettres, et les trois symboles « . », « $ », « % ». Sixbit (1968 et 1954) : 64 codes (6 bits), stocke six bits caractères par mot mémoire (PDP-10). BCD (6-bit) était utilisé par IBM sur les premiers ordinateurs comme le IBM 704 en 1954. Par la suite, il donne naissance à l'EBCDIC.
Voir aussi BCD (6-bit) et Fieldata.
Les années 1960 droite|vignette|500px|Une carte perforée 80 colonnes d'IBM d'un des types les plus utilisés au . La photographie fait apparaître le jeu de caractère EBCDIC de 1964: un chiffre est représenté par un trou, une lettre par deux et un symbole par trois. Le symbole affichable apparaît en noir bleuté sur fond bleu obscur sur le haut de la carte.
En 1960, IBM, Univac, Burrough, Honeywell et d'autres, se sont regroupés en consortium pour définir un standard commun.
Dans les années 1960, dans un contexte de guerre froide, apparaissent le GOST et l'ASCII. 1963 : naissance de l'ASCII dans le bloc des États-Unis. Prise en charge des caractères latins et anglais, sur sept bits. Dépassement de la limite précédente de six bits. 1964 : naissance de l'Extended Binary Coded Decimal Interchange Code (EBCDIC) sur 8-bit. 1964 : naissance du GOST (pour Государственный стандарт, norme d'État) dans le bloc soviétique GOST 10859. Prise en charge des caractères cyrilliques et anglais. 1968 : naissance de permettant de coder caractères.
Naissance de l'ASCII En , le , «The EBCDIC Codes and Their Mapping to ASCII» pose les bases de la conversion à l'ASCII, pour limiter les caractères utilisés.
Le standard ASCII (American Standard Code for Information Interchange) comporte 128 codes (7 bits).
Quelques valeurs courantes : ASCII 10 : Saut de ligne abrégé « LF » pour Line Feed ; ASCII 32 : Espace ; ASCII 65 : Lettre A majuscule. ASCII est standardisé en 1968 sous le nom « ANSI X3.4-1968 ». Puis les mises à jour suivent : ANSI X3.4-1977 et finalement ANSI X3.4-1986. On peut enfin le rencontrer sous le nom « US-ASCII ». Il existe en fait des dizaines de variantes de l'ASCII, mais c'est essentiellement la signification des codes de contrôles (caractères non imprimables) qui change.
Évolutions de l'ASCII vers les jeux de caractères codés sur 8 bits et la norme ISO 8859 Les variantes d'origine Le premier codage largement répandu fut l'ASCII. Pour des raisons historiques (les grandes sociétés associées pour mettre au point l'ASCII étaient américaines) et techniques (7 bits disponibles seulement pour coder un caractère), ce codage ne prenait en compte que 2 soit 128 caractères. De ce fait, l'ASCII ne comporte pas les caractères accentués, les cédilles, etc. utilisés par des langues comme le français. Ceci devint vite inadapté et un certain nombre de méthodes ad-hoc furent utilisées d’abord pour le modifier. Ainsi sont apparues des variantes multiples du codage ASCII, adaptées à des langues ou groupes de langues limités.