Les quatre modes principaux
Chaque mode échange l’étendue des caractères contre la densité. Le mode numérique ne gère que les chiffres mais en range trois dans 10 bits, tandis que le mode octet gère n’importe quel octet mais dépense 8 bits pour chacun.
Le mode alphanumérique couvre un jeu de 45 caractères : les chiffres 0 à 9, les lettres majuscules A à Z, l’espace et les symboles $ % * + - . / et les deux-points. Les minuscules n’en font pas partie, c’est pourquoi une URL entièrement en majuscules peut donner un code plus petit que la même URL en minuscules.
- Numérique : chiffres 0 à 9, 10 bits pour 3 chiffres
- Alphanumérique : 45 caractères, 11 bits pour 2 caractères
- Octet : toute valeur de 8 bits, 8 bits par octet
- Kanji : caractères à deux octets Shift JIS, 13 bits chacun
Indicateurs de mode et segments
Chaque suite de données commence par un indicateur de mode de 4 bits et un nombre de caractères, dont la longueur dépend du mode et de la version. Un code peut contenir plusieurs segments de ce type, par exemple numérique pour une longue suite de chiffres et octet pour le reste, ce qui peut réduire le résultat.
D’autres indicateurs de 4 bits signalent des fonctions plutôt que des jeux de caractères : ECI pour déclarer un encodage de caractères, l’ajout structuré pour répartir les données sur plusieurs codes, et FNC1 pour GS1 et d’autres formats de données sectoriels. Un terminateur de quatre bits à zéro clôt les données.
- Numérique 0001, alphanumérique 0010, octet 0100, kanji 1000
- ECI 0111, ajout structuré 0011
- FNC1 première position 0101, seconde position 1001
- Terminateur 0000
Mode octet et jeux de caractères
L’interprétation par défaut du mode octet dans la norme est l’ISO-8859-1 (Latin-1), mais la plupart des générateurs écrivent aujourd’hui de l’UTF-8 afin que les lettres accentuées, les autres écritures et les emojis survivent. Les lecteurs détectent généralement l’UTF-8 en inspectant les octets.
Quand le jeu de caractères doit être sans ambiguïté, un en-tête ECI peut le déclarer explicitement. Sans lui, un lecteur peut parfois se tromper et afficher des caractères illisibles.