Toute information manipulée par les ordinateurs est codée et les textes ne font pas exception. Au contraire des nombres, pour lesquels les codes utilisés sont tout compte fait peu nombreux, il y a une grande variété dans les systèmes de codage utilisés pour le texte.
Comme souvent en matière de terminologie technique -- et encore plus souvent quand il s'agit de terminologie francophone --, il faut être conscient qu'il n'y a pas de définitions universelles. Certains emploient des termes différents pour désigner la même chose. D'autres emploient un même terme pour désigner des choses différentes. Voici la définition des termes employés ici, ils ne sont pas universellement employés dans ce sens.
- un caractère c'est l'unité de base d'un codage du texte. Les caractères peuvent être des lettres, des ligatures typographiques (
) ou linguistiques (
), des idéogrammes ou des idéophonogrammes des écritures non alphabétiques, des chiffres, des symboles mathématiques ou autre,... en fait n'importe quoi qui a été jugé digne d'être encodé. Les choix faits sur ce qui constitue un caractère varient d'ailleurs parfois suivant les codages, par exemple un "à" peut être codé comme un caractère, comme deux caractères (un a et un accent grave) comme trois caractères (un a, un espace arrière, et un accent grave).
Les caractères de contrôle font partie des caractères qui sont là parce qu'ils ont été jugés digne d'être encodé. On y trouve des caractères servant à gérer le formatage (passage à la ligne, tabulation), des caractères servant à séparer des blocs d'information, des caractères servant à contrôler des périphériques, des caractères servant à gérer les transmission, des caractères servant à gérer l'encodage, et d'autres choses choses encore.
- un répertoire de caractères, c'est simplement un ensemble de caractères.
- un jeu de caractères codés, c'est un répertoire de caractères auquel on ajoute une assocation d'un nombre à chaque caractère. Ce nombre est appelé codet, valeur scalaire, élément de code, position de code, point de code et parfois même code. Chaque caractère du répertoire doit avoir un seul codet, mais un codet donné peut correspondre à plusieurs caractères. Les jeux de caractères associant plusieurs caractères à un codet sont des jeux modaux: un mode indique quel interprétation doit être utilisée. Le changement de mode s'effectuant souvent à l'aide des caractères de contrôle.
- un mécanisme de sérialisation permet d'encoder une suite de caractères, provenant d'un ou de plusieurs jeu de caractères codés, en une suite de bytes (le byte étant par définition l'unité de base du résultat d'un codage). Un code qui représente chaque caractère par un byte est un code unibyte. Un code qui peut représenter un caractère par plusieurs bytes est un code multibyte. Un code peut être modal si le même byte (ou la même suite de bytes pour un code multibyte) peut représenter plusieurs caractères différents en fonction d'un état.
Le C demande un certain répertoire minimum de caractères, appelé jeu de caractère de base: un caractère nul, les 26 lettres majuscules: A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y et Z; les 26 lettres minuscules: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y et z; les chiffres: 0, 1, 2, 3, 4, 5, 6, 7, 8 et 9; une série de symboles: ! " # % & ' ( ) * + , - . / : ; < = > ? [ \ ] ^ _ { | } et ~; un caractère espace et des caractères de contrôle pour un signal d'alerte (\a), tabulation horizontale (\t), la tabulation verticale (\v), le passage à la page suivante (\f), le retour au début de ligne (\r), le retour d'un caractère en arrière (\b) et le passage à la ligne suivante (\n).
Aux caractères de ce répertoire peuvent s'ajouter d'autres caractères, et les caractères ajoutés ainsi que leur représentation peuvent dépendre de la locale.
Le type char
est le byte d'un code qui peut être multibyte ou modal. Le C impose cependant certaines conditions sur le code: les chiffres doivent avoir des codes consécutifs commencant par le code du caractère 0, les caractères du jeu de base ont un code positif, sur un byte, valable dans l'état initial et le même code dans toutes les locales. Le caractère nul doit être représenté par un byte de valeur 0, indépendammant de la locale ou du mode. Un byte nul ne peut pas faire partie d'un caractère multibyte.