caractère d'un système d'écriture . Un jeu de caractères peut inclure non seulement des symboles du langage naturel , mais aussi des codes ayant des significations ou des fonctions hors du langage, tels que les caractères de contrôle et les espaces . Des encodages de caractères ont également été définis pour certaines langues construites . Une fois encodées, les données de caractères peuvent être stockées, transmises et transformées par un ordinateur . Les valeurs numériques qui composent un encodage de caractères sont appelées points de code et forment collectivement un espace de codage ou une page de codes .
Les premiers encodages de caractères, issus de la télégraphie optique ou électrique et des premiers ordinateurs, ne pouvaient représenter qu'un sous-ensemble des caractères utilisés dans les langues, parfois limités aux lettres majuscules , aux chiffres et à une ponctuation restreinte . Au fil du temps, des encodages capables de représenter davantage de caractères ont été créés, tels que l'ASCII , l'ISO/IEC 8859 et les encodages Unicode comme l'UTF-8 et l'UTF-16 .
L' encodage de caractères le plus répandu sur le Web est l'UTF-8, utilisé par 98,9 % des sites Web étudiés ( les programmes d'application et les tâches système d'exploitation , UTF-8 et UTF-16 sont des options courantes.
le chiffre de Bacon , le braille , les pavillons de signalisation maritime internationaux et le codage à quatre chiffres des caractères chinois pour le code télégraphique chinois ( Hans Schjellerup , 1869). Avec l'adoption des techniques électriques et électromécaniques, ces premiers codes furent adaptés aux nouvelles capacités et limitations des premières machines. Le premier code de caractères à transmission électrique bien connu, le code Morse , introduit dans les années 1840, utilisait un système de quatre « symboles » (signal court, signal long, espace court, espace long) pour générer des codes de longueur variable. Bien que le code Morse ait été utilisé commercialement, il était souvent employé manuellement, généré à la main sur un manipulateur télégraphique et déchiffrable à l'oreille. Il est encore utilisé aujourd'hui en radioamateur et en aéronautique . La plupart des codes sont de longueur fixe par caractère ou des séquences de longueur variable de codes de longueur fixe (par exemple Unicode ).Parmi les systèmes de codage de caractères les plus courants, on peut citer le code Morse, le code Baudot , le code ASCII ( American Standard Code for Information Interchange ) et Unicode. Unicode, système de codage bien défini et extensible, a remplacé la plupart des codages de caractères antérieurs, mais l'évolution de ce code jusqu'à aujourd'hui est relativement bien documentée.
Le code Baudot, un codage sur cinq bits , a été créé par Émile Baudot en 1870, breveté en 1874, modifié par Donald Murray en 1901 et normalisé par le CCITT sous le nom d'Alphabet télégraphique international n° 2 (ITA2) en 1930. Le nom Baudot a été appliqué à tort à l'ITA2 et à ses nombreuses variantes. L'ITA2 présentait de nombreuses lacunes et a souvent été amélioré par de nombreux fabricants d'équipements, ce qui a parfois engendré des problèmes de compatibilité.

Herman Hollerith inventa le codage des données par cartes perforées à la fin du XIXe siècle pour analyser les données de recensement. Initialement, chaque perforation représentait une donnée différente. Plus tard, les informations numériques furent codées en numérotant les lignes inférieures de 0 à 9, chaque perforation correspondant au numéro de ligne. Par la suite, les données alphabétiques furent codées en autorisant plusieurs perforations par colonne. Les machines à tabuler électromécaniques représentaient les données en interne par la synchronisation des impulsions avec le défilement des cartes dans la machine.
Lorsqu'IBM s'est tournée vers le traitement électronique, avec le multiplicateur électronique IBM 603 , elle a utilisé divers systèmes de codage binaire liés au codage des cartes perforées. IBM a employé plusieurs systèmes de codage décimal binaire (BCD) à six bits, dès 1953 sur ses ordinateurs 702 et 704 , puis sur ses séries 7000 et 1400 , ainsi que sur les périphériques associés. Le codage des cartes perforées alors en vigueur étant limité aux chiffres, aux lettres majuscules et à quelques caractères spéciaux, six bits suffisaient. Ces codages BCD ont étendu le codage numérique simple à quatre bits existant pour inclure les caractères alphabétiques et spéciaux, en les convertissant facilement au codage des cartes perforées, déjà largement répandu. Les codes IBM étaient principalement utilisés avec les équipements IBM. D'autres constructeurs informatiques de l'époque disposaient de leurs propres codages de caractères, souvent à six bits, comme celui utilisé par l' UNIVAC I. Ils avaient généralement la capacité de lire les bandes produites sur les équipements IBM. Les encodages BCD d'IBM étaient les précurseurs de leur Extended Binary-Coded Decimal Interchange Code (généralement abrégé en EBCDIC), un système d'encodage à huit bits développé en 1963 pour le système IBM/360 qui comportait un jeu de caractères plus large, incluant les lettres minuscules.
En 1959, l'armée américaine a défini le code Fieldata , un code à six ou sept bits introduit par le Corps des transmissions de l'armée américaine. Bien que Fieldata ait répondu à de nombreuses problématiques modernes de l'époque (par exemple, les codes de lettres et de chiffres organisés pour le classement automatique), il n'a pas atteint ses objectifs et a eu une courte durée de vie. En 1963, le premier code ASCII (X3.4-1963) a été publié par le comité ASCII (qui comptait au moins un membre du comité Fieldata, W.F. Leubbert). Ce code, plus simple et à sept bits, corrigeait la plupart des lacunes de Fieldata. Nombre de ces modifications étaient subtiles, comme la possibilité de classer les caractères dans certaines plages numériques. L'ASCII-63 a rencontré un vif succès et a été largement adopté par l'industrie. Avec la publication de la version suivante, le code ASCII de 1967 (qui ajoutait les lettres minuscules et corrigeait certains problèmes liés aux « codes de contrôle »), l'ASCII-67 a connu une adoption assez large. Le caractère américanocentré de l'ASCII-67 a été partiellement corrigé dans la norme européenne ECMA-6 . Les encodages ASCII étendus sur huit bits , tels que diverses extensions de fournisseurs et la série ISO/IEC 8859 , prenaient en charge tous les caractères ASCII ainsi que des caractères non ASCII supplémentaires.
Dans les années 1980, alors qu'ils s'efforçaient de développer des encodages de caractères universellement interchangeables, les chercheurs se sont trouvés confrontés à un dilemme : d'une part, il semblait nécessaire d'ajouter des bits pour prendre en charge des caractères supplémentaires ; d'autre part, pour les utilisateurs du jeu de caractères relativement restreint de l'alphabet latin (qui constituaient encore la majorité des utilisateurs d'ordinateurs), ces bits supplémentaires représentaient un gaspillage colossal de ressources informatiques alors rares et coûteuses (puisqu'ils seraient systématiquement mis à zéro pour ces utilisateurs). En 1985, le disque dur d'un ordinateur personnel moyen ne pouvait stocker qu'environ 10 mégaoctets et coûtait environ 250 dollars américains sur le marché de gros (et bien plus cher s'il était acheté séparément au détail) . Il était donc crucial à l'époque d'optimiser chaque bit.
La solution de compromis finalement trouvée et points de code . Ces points de code étaient ensuite représentés de diverses manières et avec différents nombres de bits par caractère (unités de code) en fonction du contexte. Pour encoder des points de code supérieurs à la longueur de l'unité de code, par exemple au-delà de 256 pour les unités de huit bits, la solution consistait à implémenter des encodages à longueur variable, où une séquence d'échappement signalait que les bits suivants devaient être interprétés comme un point de code supérieur.
Terminologie
Les différents termes relatifs à l'encodage des caractères sont souvent utilisés de manière incohérente, voire incorrecte. Historiquement, une même norme spécifiait un répertoire de caractères et leur mode d'encodage en une série d'unités de code – généralement un seul caractère par unité. Cependant, avec l'émergence d'encodages de caractères plus sophistiqués, la distinction entre ces termes est devenue essentielle.
Personnage
Un caractère est la plus petite unité de texte ayant une valeur sémantique. En linguistique , on l'appelle un graphème et chacune de ses différentes représentations écrites est appelée un glyphe . (Par exemple, la forme avec empattement sans empattement diacritiques , deux approches distinctes sont possibles : soit un caractère unique (appelé caractère précomposé), soit des caractères séparés se combinant en un seul glyphe . La première méthode simplifie le traitement du texte, tandis que la seconde autorise toute combinaison lettre/diacritique. Les ligatures posent des problèmes similaires. Certains systèmes d'écriture, comme l'arabe et l'hébreu, possèdent des graphèmes dont la forme et la liaison dépendent du contexte.
Ensemble de caractères
Un jeu de caractères est une collection de caractères utilisés pour représenter du texte. Par exemple, l' alphabet latin et l'alphabet grec sont des jeux de caractères.
Jeu de caractères codés
Un jeu de caractères codés est un jeu de caractères dont chaque élément est associé de manière unique à une valeur numérique.
On parle également de page de codes , bien que ce terme soit généralement désuet. À l'origine, « page de codes » désignait un numéro de page dans un manuel IBM définissant un encodage de caractères particulier . D'autres fournisseurs, tels que Microsoft , SAP et Oracle Corporation , ont également publié leurs propres pages de codes, notamment la page de codes Windows et la page de codes 437. Bien que ce terme ne fasse plus référence à des pages spécifiques d'un manuel, de nombreux encodages de caractères sont encore identifiés par ce même numéro. De même, le terme « page de codes » est toujours utilisé pour désigner un encodage de caractères.
Dans les systèmes Unix et de type Unix , le terme charmap est couramment utilisé ; généralement dans le contexte plus large des paramètres régionaux.
L'architecture de représentation des données de caractères (CDRA) d'IBM désigne chaque entité avec un identifiant de jeu de caractères codé (CCSID) , appelé charset , jeu de caractères , page de codes ou CHARMAP .
répertoire de personnages
Un répertoire de caractères est un ensemble de caractères pouvant être représentés par un jeu de caractères codés particulier. Ce répertoire peut être fermé, c'est-à-dire qu'aucun ajout n'est autorisé sans la création d'une nouvelle norme (comme c'est le cas pour l'ASCII et la plupart des normes de la série ISO-8859) ; ou il peut être ouvert, autorisant des ajouts (comme c'est le cas pour Unicode et, dans une certaine mesure, pour les pages de codes Windows ).
Point de code
- UTF-8 : les points de code correspondent à une séquence d’une, deux, trois ou quatre unités de code.
- En UTF-16, les unités de code sont deux fois plus longues que les unités de code 8 bits. Par conséquent, tout point de code dont la valeur scalaire est inférieure à U+10000 est encodé avec une seule unité de code. Les points de code de valeur supérieure ou égale à U+10000 nécessitent chacun deux unités de code. Ces paires d'unités de code sont désignées par le terme spécifique « paires de substitution Unicode » en UTF-16.
- UTF-32 : l’unité de code de 32 bits est suffisamment grande pour que chaque point de code soit représenté par une seule unité de code.
- GB 18030 : plusieurs unités de code par point de code sont courantes en raison de la petite taille des unités de code. Les points de code sont associés à une, deux ou quatre unités de code.
Espace de code
L'espace de codage est la plage de valeurs numériques couvertes par un jeu de caractères codés.
unité de code
Une unité de code est la combinaison minimale de bits permettant de représenter un caractère dans un codage de caractères (en informatique , elle correspond à la taille d'un mot du codage de caractères). Les unités de code courantes sont de 7, 8, 16 et 32 bits. Dans certains codages, certains caractères sont codés sur plusieurs unités de code .
Par exemple:
Encodage Unicode
Unicode et sa norme parallèle, le jeu de caractères universel ISO/IEC 10646 , constituent ensemble une norme unifiée pour l'encodage des caractères. Au lieu d'associer directement les caractères à des octets , Unicode définit séparément un jeu de caractères codés qui associe chaque caractère à un nombre naturel unique ( point de code ), la manière dont ces points de code sont associés à une série de nombres naturels de taille fixe (unités de code), et enfin la manière dont ces unités sont encodées sous forme de flux d'octets. Cette décomposition vise à établir un ensemble universel de caractères pouvant être encodés de diverses manières. Pour décrire précisément ce modèle, Unicode utilise des termes existants et en définit de nouveaux.
répertoire de personnages abstraits
Un répertoire de caractères abstraits (RCA) est l'ensemble complet des caractères abstraits pris en charge par un système. Unicode possède un répertoire ouvert, ce qui signifie que de nouveaux caractères y seront ajoutés au fil du temps.
Jeu de caractères codés
Un jeu de caractères codés (CCS) est une fonction qui associe des caractères à des points de code (chaque point de code représentant un caractère). Par exemple, dans un répertoire donné, la lettre majuscule « A » de l’alphabet latin peut être représentée par le point de code 65, le caractère « B » par 66, et ainsi de suite. Plusieurs jeux de caractères codés peuvent partager le même répertoire de caractères ; par exemple, les normes ISO/IEC 8859-1 et les pages de codes IBM 037 et 500 couvrent toutes deux le même répertoire, mais les associent à des points de code différents.
Forme d'encodage de caractères
Les systèmes matériels et logiciels ont généralement une longueur de mot « native » maximale, par exemple 16 ou 32 bits. Un codage de caractères peut définir des points de code dont la longueur dépasse cette longueur de mot native. Un format de codage de caractères (CEF) est la correspondance entre les points de code et les unités de code qui les décomposent de manière standardisée, de sorte que chaque unité de code soit compatible avec la longueur de mot du système. Par exemple, un ordinateur qui représente les nombres par unités de 16 bits ne peut représenter que des points de code jusqu'à 65 535 par unité, mais des points de code plus longs peuvent être représentés à l'aide de plusieurs unités de 16 bits, conformément au CEF.
Schéma d'encodage des caractères
Un schéma d'encodage de caractères (CES) consiste à associer des unités de code à une séquence d'octets afin de faciliter leur stockage sur un système de fichiers octet-par-octet ou leur transmission sur un réseau octet-par-octet. Parmi les schémas d'encodage simples , on trouve UTF-8 , UTF-16BE , UTF-32BE , UTF-16LE et UTF-32LE ; les schémas d'encodage composés, tels que UTF-16 , UTF-32 et ISO/IEC 2022 , alternent entre plusieurs schémas simples grâce à une marque d'ordre des octets ou des séquences d'échappement ; les schémas de compression visent à minimiser le nombre d'octets utilisés par unité de code (comme SCSU et BOCU ).
Bien que les encodages UTF-32BE et UTF-32LE soient des encodages simplifiés, la plupart des systèmes Unicode utilisent soit l'UTF-8 , rétrocompatible avec l'ASCII de longueur fixe et qui associe les points de code Unicode à des séquences d'octets de longueur variable, soit l'UTF-16BE , rétrocompatible avec l'UCS-2BE de longueur fixe et qui associe les points de code Unicode à des séquences de mots de 16 bits de longueur variable. Pour une analyse détaillée, consultez la comparaison des encodages Unicode .
Protocole de niveau supérieur
Il peut exister un protocole de niveau supérieur fournissant des informations supplémentaires pour sélectionner la variante particulière d'un caractère Unicode , notamment lorsqu'il existe des variantes régionales unifiées en Unicode sous l'appellation « un seul et même caractère ». L' attribut XML xml:lang en est un exemple.
Le modèle Unicode utilise le terme « table de caractères » pour d'autres systèmes qui attribuent directement une séquence de caractères à une séquence d'octets, couvrant toutes les couches CCS, CEF et CES.
Documentation des points de code
Un caractère est généralement documenté par « U+ » suivi de sa valeur de point de code en hexadécimal . L’espace de codage Unicode s’étend de U+0000 à U+10FFFF inclus, divisé en 17 plans , numérotés de 0 à 16. Les caractères de la plage U+0000 à U+FFFF se trouvent dans le plan 0, appelé plan multilingue de base (BMP). Ce plan contient les caractères les plus fréquemment utilisés. Les caractères de la plage U+10000 à U+10FFFF, situés dans les autres plans, sont appelés caractères supplémentaires .
Le tableau suivant contient des exemples de points de code :
| Personnage | Point de code | Graphème |
|---|---|---|
| Latin A | U+0041 | A |
| S dièse latin | U+00DF | ß |
| Han pour l'Est | U+6771 | 東 |
| Esperluette | U+0026 | & |
| point d'exclamation inversé | U+00A1 | ¡ |
| Panneau de section | U+00A7 | § |
Exemple
Prenons l'exemple de « ab̲c𐐀 » caractères composés : points de code Unicode : octets ) transcodage . Parmi les logiciels notables, on peut citer :
- Navigateur Web – Les navigateurs modernes intègrent la détection automatique de l'encodage des caractères
- iconv – Programme et API standardisée pour la conversion d'encodages
- luit – Programme qui convertit l'encodage des entrées et des sorties en programmes s'exécutant de manière interactive
- Composants internationaux pour Unicode – Un ensemble de bibliothèques C et Java pour la conversion de jeux de caractères
- Encoding.Convert – API .NET
- MultiByteToWideChar/WideCharToMultiByte – Fonctions de l’API Windows pour la conversion entre ANSI et Unicode
Encodages de caractères courants
- ISO 8859-1 Europe de l'Ouest
- ISO 8859-2 Europe occidentale et centrale
- ISO 8859-3 Europe occidentale et Europe du Sud (turc, maltais et espéranto)
- ISO 8859-4 Europe occidentale et pays baltes (Lituanie, Estonie, Lettonie et Laponie)
- Alphabet cyrillique ISO 8859-5
- ISO 8859-6 Arabe
- ISO 8859-7 Grec
- ISO 8859-8 Hébreu
- Norme ISO 8859-9 Europe occidentale avec jeu de caractères turcs modifié
- ISO 8859-10 Europe occidentale avec jeu de caractères rationalisé pour les langues nordiques, incluant le jeu complet islandais
- ISO 8859-11 Thaïlandais
- Norme ISO 8859-13 Langues baltes et polonais
- ISO 8859-14 Langues celtiques (gaélique irlandais, écossais, gallois)
- ISO 8859-15 Ajout du symbole euro et autres rationalisations par rapport à la norme ISO 8859-1
- ISO 8859-16 Langues d'Europe centrale, orientale et méridionale (albanais, bosnien, croate, hongrois, polonais, roumain, serbe et slovène, mais aussi français, allemand, italien et gaélique irlandais)
- Windows-1250 pour les langues d'Europe centrale utilisant l'alphabet latin (polonais, tchèque, slovaque, hongrois, slovène, serbe, croate, bosnien, roumain et albanais).
- Windows-1251 pour les alphabets cyrilliques
- Windows-1252 pour les langues occidentales
- Windows-1253 pour le grec
- Windows-1254 pour turc
- Windows-1255 pour l'hébreu
- Windows-1256 pour l'arabe
- Windows-1257 pour les langues baltes
- Windows-1258 pour le vietnamien
- Shift JIS (la page de code Microsoft 932 est un dialecte de Shift_JIS)
- EUC-JP
- ISO-2022-JP
- Hong Kong HKSCS
- KS X 1001 est une norme coréenne d'encodage de caractères sur deux octets
- EUC-KR
- ISO-2022-KR