Qu’est-ce que le standard Unicode ?
L’émergence des langues a permis de transmettre et de préserver les connaissances au fil des générations. Le développement de l’écriture a rendu le transfert des connaissances encore plus facile.
La plupart des systèmes d’écriture utilisés aujourd’hui sont vieux de centaines, voire de milliers d’années. En revanche, le texte numérique est relativement nouveau. La représentation numérique des textes était principalement orientée vers la langue anglaise dans les premières années. Mais aujourd’hui, une part considérable des interactions humaines a lieu sur Internet à l’échelle mondiale. Les gens échangent des informations à travers les langues et les frontières nationales. Ce changement a nécessité une nouvelle approche et la création d’une structure uniforme pour échanger des textes en utilisant différents systèmes d’écriture et des signes variés. Dans le même temps, les progrès technologiques ont ouvert de toutes nouvelles possibilités d’affichage des caractères.
Un exemple : pensez aux emojis populaires sur votre téléphone. Les icônes peuvent être utilisées avec un clavier spécial comme des lettres, presque comme si elles faisaient naturellement partie de l’alphabet. Comment cela est-il possible ? Le standard Unicode fournit l’explication.
- Domaine .eu ou .fr + éditeur de site gratuit pendant 6 mois
- 1 certificat SSL Wildcard par contrat
- Boîte email de 2 Go
Unicode : définition et explications
Unicode est la version courte de « Universal Character Encoding » en anglais, c’est-à-dire « Codage universel de caractères ». Il s’agit d’une norme standardisée pour le codage des caractères en représentation binaire. L’Unicode permet de stocker et de traiter des textes dans des systèmes numériques.
Ce qui fait la spécificité d’Unicode, c’est que ce standard n’est pas lié aux formats et aux codages de l’alphabet d’une langue en particulier. Au contraire, Unicode a été créé dans le but de servir de norme uniforme pour représenter tous les systèmes d’écriture et tous les caractères qui existent à travers le monde.
Depuis la sortie d’Unicode 1.0 en 1991, le standard a été à la hauteur de son objectif. Unicode est utilisé en interne par les navigateurs et les systèmes d’exploitation en tant que format unique. Avec la version 13.0 publiée par le Consortium Unicode en 2020, le standard Unicode comprend désormais un répertoire de 143 859 caractères au total.
Le Consortium Unicode est une organisation à but non lucratif basée en Californie qui s’engage à faire progresser le standard. Les membres du consortium sont des entreprises technologiques de premier plan telles qu’Adobe, Apple, Facebook, Google, IBM, Microsoft, Netflix et SAP. Le jeu de caractères couvert par le standard Unicode coïncide avec l’UCS (Universal Coded Character Set), qui est standardisé au niveau international sous l’appellation ISO / CEI 10646.
Base technique pour le codage des caractères
L’écriture et les textes sont omniprésents dans la vie d’une personne moderne. La lecture et l’écriture sont parmi les premières compétences qu’on apprend à l’école. Il n’est donc pas surprenant que de nombreuses personnes prennent simplement l’existence de l’écriture numérique pour acquise. Mais comment fonctionne exactement la représentation technique de l’écriture ? Faites un voyage avec nous dans le monde du codage des polices numériques.
Tout d’abord, il est important de comprendre que toutes les informations présentes dans un système numérique sont en fait constituées de chaînes interminables de 0 et de 1. On parle aussi de « représentation binaire ». Le code binaire est en lui-même une sorte d’alphabet. Cependant, il n’y a que deux « lettres » dans le code binaire : les 0 et les 1. Chaque chiffre dans une séquence de 0 et de 1 est appelé un « bit ».
L’astuce de base de la technologie de l’informatique consiste à rendre compte des caractères de différents alphabets sous forme de séquences de 0 et de 1. Les nombres et les lettres peuvent être codés de cette manière, mais aussi tous les autres caractères reconnaissables. En général, on parle de « symboles ». Plus la séquence de 0 et de 1 est longue pour l’affichage d’un seul symbole, plus il est possible d’afficher de symboles. Le nombre de symboles possibles double à chaque bit ajouté.
Un exemple concret : imaginons que nous ayons des « mots » binaires de deux bits de long. Ils nous permettent de coder 4 chiffres :
Mot de 2 bits | Chiffre |
00 | 0 |
01 | 1 |
10 | 2 |
11 | 3 |
Si nous ajoutons un autre bit au début de la séquence, le nombre de mots binaires possibles double. Les nouveaux mots sont constitués des séquences de bits déjà connues, chacune précédée d’un 0 ou d’un 1. On peut donc coder huit chiffres :
Mot de 3 bits | Chiffre |
000 | 0 |
001 | 1 |
010 | 2 |
011 | 3 |
100 | 4 |
101 | 5 |
110 | 6 |
111 | 7 |
Un mot de 8 bits est appelé octet ou byte.
Par souci de simplicité, nous vous avons montré ici le codage des chiffres à titre d’exemple. Cependant, le même principe est également utilisé dans les systèmes informatiques pour le codage des lettres ou de tout autre caractère. Voici un exemple très simplifié de codage binaire de lettres :
Mot de 3 bits | Lettre |
000 | A |
001 | B |
010 | C |
Notez que nos explications jusqu’à présent n’ont rien à voir avec les polices. Nous ne discutons que du modèle interne sur la base duquel les caractères sont représentés numériquement. La représentation graphique d’un caractère s’appelle un glyphe. Selon la police utilisée, il existe différents glyphes pour le même caractère, et même au sein d’une même police, il peut y avoir plusieurs variantes pour un glyphe. Pensez par exemple aux différents accents, à la casse, aux italiques, etc. Voici une représentation étendue, qui comprend l’affectation d’un caractère à un glyphe :
Représentation binaire | Nombre décimal | Caractère codé | Glyphe |
---|---|---|---|
1000001 | 65 | A majuscule de l’alphabet latin | A |
1100001 | 97 | a minuscule de l’alphabet latin | a |
0110000 | 48 | Chiffre arabe 0 | 0 |
0111001 | 57 | Chiffre arabe 9 | 9 |
11000100 | 196 | Ä majuscule | Ä |
11000001 | 193 | Á majuscule | Á |
Terminologie du codage des caractères
Le codage numérique de caractères implique un certain nombre de concepts spécifiques. En français, les différents termes sont parfois utilisés comme des synonymes. Afin de pouvoir donner une définition Unicode précise, nous donnons également les termes anglais ici :
Concept | Définition | Terme anglais |
---|---|---|
Jeu de caractères | Ensemble de caractères possibles, par ex. les chiffres 0 à 9, les lettres de a à z, etc. | Character set |
Point de code | Valeur numérique attribuée à chaque caractère spécifique dans le codage des caractères | Code point |
Jeu de caractères codés | Jeu de caractères dans lequel chaque caractère a exactement un point de code | Coded character set |
Codage de caractère | Processus de conversion d’un signe en une structure technique par exemple en représentation binaire | Character encoding |
Aperçu du codage de certains caractères courants
Avant la création d’Unicode, il existait une grande variété de codages spécifiques. C’était la norme d’avoir alors un codage distinct pour chaque langue ou famille de langues. Cela conduisait souvent à des erreurs d’affichage et à des incohérences dans les données. Pour éviter ça, les codages de caractères ont souvent été modélisés comme un nouvel ensemble englobant, et compatible avec, un standard existant. Le standard Unicode moderne est basé sur l’ancien codage de caractères ISO Latin-1, qui à son tour est basé sur le code ASCII.
Codage de caractères | Bits par caractère | Caractères possibles | Jeu de caractères |
---|---|---|---|
ASCII | 7 Bits | 128 | Lettres, chiffres et caractères spéciaux du clavier américain, ainsi que des caractères de contrôle pour les téléscripteurs |
ISO Latin-1 (ISO 8859-1) | 8 Bits | 256 | Les 128 premiers caractères sont ceux d’ASCII, les 128 autres caractères correspondent à des caractères spéciaux de langues européennes |
Universal Coded Character Set 2 (UCS-2) | 16 Bits | 65 536 | Caractères du « Basic Multilingual Plane » (BMP) ; les 256 premiers caractères sont ceux de ISO Latin-1 |
Universal Coded Character Set 4 (UCS-4) | 32 Bits | 1 114 111 | Caractères du BMP et d’autres qui y ont été ajoutés ; 143 859 caractères en tout dans la version Unicode 13.0 ; les 256 premiers caractères sont ceux de ISO Latin-1 |
UCS Transformation Format 8 Bit (UTF-8) | 8/16/24/32 Bits | 1 114 111 | Tous les caractères de UCS-2 et UCS-4 ; les 256 premiers caractères sont ceux de ISO Latin-1 |
- Domaine .eu ou .fr + éditeur de site gratuit pendant 6 mois
- 1 certificat SSL Wildcard par contrat
- Boîte email de 2 Go
Structure du standard Unicode
Le standard Unicode définit les caractères et les points de code correspondants aux lettres, syllabes, idéogrammes, signes de ponctuation, caractères spéciaux et aux chiffres. En plus de l’alphabet latin, les alphabets grec, cyrillique, arabe, hébreu et thaï sont intégrés. Les signes japonais (Katakana, Hiragana), chinois et coréen (Hangeul) sont également pris en compte. Il existe aussi des caractères mathématiques, commerciaux et techniques spéciaux, ainsi que des caractères de contrôle historiques pour les téléscripteurs.
Les caractères sont résumés dans une série de tableaux de caractères. Nous donnons ici un aperçu des tableaux de caractères les plus courants.
Systèmes d’écriture du standard Unicode
Tableaux de caractères | Contient entre autres les alphabets suivants |
---|---|
Systèmes d’écriture européens | Arménien, Géorgien, Grec, Latin |
Systèmes d’écriture africains | Copte, Éthiopien, Hiéroglyphes égyptiens |
Systèmes d’écriture du Proche Orient | Arabe, Hébreu, Syrien |
Systèmes d’écriture d’Asie Centrale | Mongole, Tibétain, Vieux Turc |
Systèmes d’écriture d’Asie du Sud | Brahmi, Tamoul, Védique |
Systèmes d’écriture d’Asie du Sud-Est | Khmer, Rohingya, Thaï |
Systèmes d’écriture d’Indonésie et d’Océanie | Balinais, Bugi, Javanais |
Systèmes d’écriture d’Extrême Orient | CJC (Chinois, Japonais, Coréen), Hangeul (Coréen), Hiragana (Japonais) |
Systèmes d’écriture d’Amérique | Cherokee, Syllabaire autochtone canadien, Osage |
Symboles et Signes de ponctuation du standard Unicode
Tableaux de caractères | Contient entre autres les caractères suivants |
---|---|
Signes de ponctuation | Ponctuation anglaise, ponctuation des langues européennes, ponctuation CJC |
Caractères alphanumériques | Symboles de type lettre, symboles alphanumériques délimités |
Symboles techniques | Symboles APL, reconnaissance optique de caractères (ROC) |
Chiffres et nombres | Chiffres maya, nombres siyaq ottomans, ponctuation et nombres cunéiformes |
Symboles mathématiques | Flèches, opérateurs mathématiques, formes géométriques |
Pictogrammes et emojis | Émoticônes, dingbats, autres pictogrammes |
Autres symboles | Symboles alchimiques, symboles monétaires, symboles de jeux |
Systèmes de notation | Combinaisons braille, symboles musicaux, sténographie Duployé |
À quoi sert le standard Unicode ?
Le standard Unicode sert principalement de base universelle pour le traitement, le stockage et l’échange de texte dans n’importe quelle langue. La plupart des composants logiciels modernes, tels que les bibliothèques, les protocoles, les bases de données, etc. qui fonctionnent avec du texte, sont basés sur Unicode. Nous illustrons l’éventail des utilisations possibles à l’aide des exemples suivants.
Systèmes d’exploitation
Unicode est le standard interne de représentation du texte dans la plupart des systèmes d’exploitation modernes. Certains systèmes d’exploitation, comme le macOS d’Apple, autorisent l’utilisation de caractères Unicode dans les noms de fichiers.
Sites Internet
La variante Unicode UTF-8 s’est imposée comme le standard pour le codage de documents HTML. Dès 2016, plus de 80 % des sites Web les plus visités au monde utilisaient UTF-8 pour stocker et afficher leurs documents HTML. Le standard Punycode s’est établi pour l’utilisation de lettres hors ASCII des noms de domaine.
- Éditeur de site intuitif avec fonctions d'IA
- Générateur d'images et de textes avec optimisation SEO
- Domaine, SSL et boîte email inclus
Langages de programmation
De nombreux langages de programmation modernes utilisent Unicode comme base pour le traitement du texte. Depuis un développement plus récent, il est possible d’utiliser des caractères Unicode pour nommer des variables et des fonctions. Ceci est possible dans ECMAScript/JavaScript comme on peut le voir dans le code suivant :
let ︎ = true;
let = false;
if (bool_var === ︎) {
// …
}
Banques de données
La base de données populaire et largement utilisée MySQL prend en charge le jeu de caractères Unicode complet avec le codage de caractères « utf8mb4 ». Cependant, lors de l’utilisation du codage de caractères « utf8 », les caractères dont le point de code est supérieur à 3 octets sont perdus.
Polices
Les polices contiennent les glyphes utilisés pour représenter graphiquement le texte. En raison du grand nombre de caractères contenus dans le standard Unicode, aucune police ne contient tous les caractères. Même le sous-ensemble du BMP n’est complètement couvert que par quelques polices. Voici quelques exemples :
Police Unicode | Glyphes | Licence |
---|---|---|
Noto | env. 65 000 | Open Font License |
Sun-ExtA/B | env. 50 000 | Freeware |
Unifont | env. 63 000 | GNU GPL |
Code2000 | env. 63 000 | Shareware |
Comment utiliser le standard Unicode ?
Bien souvent, les utilisateurs utilisent Unicode sans le savoir. Dans la plupart des documents et applications, le texte numérique est disponible au format Unicode et peut être copié, inséré et modifié selon les besoins de l’utilisateur. Parfois, l’utilisateur doit insérer un caractère Unicode spécifique dans le texte. Il existe différentes manières de le faire, que nous présenterons ci-dessous.
Claviers des caractères spéciaux
L’utilisation de claviers spéciaux est probablement la méthode la plus courante pour insérer des caractères Unicode dans du texte. Omniprésents sur les appareils mobiles, les claviers spéciaux vous permettent de basculer entre les différentes langues et alphabets. Tous les caractères étant issus du répertoire Unicode, en cliquant sur une même touche, on peut taper différents caractères. Ceux-ci peuvent être mélangés à volonté et combinés les uns aux autres dans des textes.
Les emojis en sont un bon exemple. En standard Unicode, les emojis sont des caractères au même titre que les lettres, les chiffres et les caractères spéciaux. Comme avec les caractères numériques, l’affichage des emojis est indépendant de leur modélisation interne. Chaque système d’exploitation présente le même emoji légèrement différemment.
Ces claviers spéciaux utiles ne se trouvent pas que sur les appareils mobiles. Ils sont également disponibles sur le bureau des ordinateurs. Ils peuvent être facilement ouverts dans Windows, macOS et de nombreuses distributions Linux pour afficher un nombre de caractères différent selon la langue sélectionnée. Le nombre de touches étant limité, tous les caractères Unicode ne sont pas affichés. Il s’agit plutôt d’une sélection des caractères les plus courants spécifiques à une langue.
Tableaux des caractères Unicode
En plus des claviers de caractères spéciaux, les tableaux de caractères Unicode sont sans doute le moyen le plus utile d’accéder aux différents caractères Unicode. Pour rappel, un jeu de caractères codés (Coded Character Set) est l’ensemble de tous les caractères avec leurs points de code uniques correspondants. Pour une telle structure, la disposition en tant que tableau est idéale, et le standard Unicode inclut précisément de tels tableaux appelées Code Charts. D’une part, des caractères spécifiques peuvent être copiés à partir de ces tableaux pour les utiliser ailleurs, d’autre part, l’utilisateur peut lire le point de code correspondant, par exemple pour l’utiliser comme référence de caractère numérique.
De nombreux systèmes d’exploitation de PC contiennent également une table de caractères Unicode. Elle donne un aperçu de tous les caractères Unicode disponibles, y compris le point de code, la description et le glyphe. Un caractère peut être inséré ou copié en un clic. Vous pouvez également créer vous-même une table de caractères avec seulement quelques lignes de code. Nous vous montrerons un exemple dans le langage de programmation Python dans la suite de l’article.
Références numériques
Le standard Unicode met l’accent sur l’affectation des caractères aux points de code. Si vous connaissez le point de code d’un caractère, vous pouvez l’utiliser pour intégrer le caractère correspondant dans différents contextes. Sous Windows, insérer des symboles Unicode se fait en utilisant le clavier normal ou en utilisant une combinaison de différentes touches. Notez que le numéro de point de code doit normalement être entré en notation hexadécimale.
Le plus souvent, les programmeurs ont besoin des références numériques. La représentation hexadécimale des points de code permet la représentation d’un caractère Unicode en caractère du jeu de caractères ASCII. Nous montrons le processus ici en HTML. En principe, le fonctionnement est le même en Python, C ++, etc.
Le schéma général pour inclure un caractère par référence numérique comprend la référence elle-même, ainsi qu’un terme d’ouverture et de fermeture : dans les documents HTML, la référence numérique s’ouvre avec « &#x » et se termine par « ; ». Entre les deux, le point de code hexadécimal de deux à quatre chiffres est entré sans espace. Le résultat est le modèle « &#xNNNN; ».
Par exemple, pour insérer le symbole de copyright « © » dans un document HTML, on procède comme suit :
- Rechercher le caractère dans un tableau Unicode.
- Lire le point de code correspondant au caractère.
Dans notre exemple, le point de code est « U+00A9 », qui en est la représentation hexadécimale.
- Composer la référence du caractère et entrez-la dans le texte source HTML ou un fichier Markdown.
Dans notre cas, nous entrons « © » ; ce qui nous donne le résultat «©».
Une autre approche, moins courante, permet l’utilisation de points de code en représentation décimale au lieu d’une représentation hexadécimale. Dans ce cas, la référence numérique commence par « &# » (sans le « x ») et se termine par « ; » comme avec la première méthode. Entre les deux, le point de code est écrit en notation décimale. Dans notre exemple, la référence numérique « © » correspond au symbole copyright.
Utilisez le Unicode Character Inspector pour trouver rapidement les différents codes des caractères.
Références nommées
Puisqu’écrire des caractères Unicode avec des références numériques n’est pas vraiment intuitif, il existe une autre méthode : grâce aux références nommées. Celles-ci sont définies pour les caractères fréquemment utilisés et donnent au caractère un nom court qui peut être mémorisé. Une référence nommée commence par l’esperluette « & » et se termine par un point-virgule « ; ». Le nom défini est placé entre les deux sans espaces. Pour insérer le symbole de copyright « © » en HTML, écrivez simplement « © ».
La liste complète des références de caractères nommées est enregistrée en standard HTML.
Langages de programmation
La plupart des langages de programmation contiennent des fonctions de base qui peuvent être utilisées pour convertir des caractères et des points de code. Les fonctions correspondantes sont souvent appelées « ord(caractère) » et « chr(point de code) ». Ce qui suit s’applique :
« chr(ord(caractère)) == caractère »
Notez qu’il est toujours possible de déterminer le point de code correspondant à un caractère. À l’inverse, l’affectation ne fonctionne que pour les nombres qui sont réellement définis comme des points de code du jeu de caractères codés. Nous montrons le schéma de base ici en utilisant un court exemple Python :
# Déterminer le point de code décimal d’un caractère
ord('A') # `65`
# Déterminer le point de code hexadécimal d’un caractère
hex(ord('A')) # `0x41`
# Déterminer le point de code correspondant à un caractère
chr(65) # `'A'`
chr(0x41) # `'A'`
chr(0x110001) # erreur, puisque le point de code > `0x110000`
A l’aide de ces fonctions, il est possible de créer une table de caractères facilement pour les points de code du jeu de caractères Unicode. Pour ce faire, vous répétez les points de code et sortez les caractères correspondants. Avec Python, cela se fait en quelques lignes de code :
# Commencer `range` à `32`, car les caractères de contrôle sont générés avec une valeur plus petite
# Donner les caractères du jeu ASCII
# for code_point in range(32, 128):
# Donner ISO Latin-1
for code_point in range(32, 256):
# Donner les points de code en notation décimale et hexadécimale avec les caractères associés
print(code_point, hex(code_point), chr(code_point))
Bibliothèque ICU
Les composants internationaux pour Unicode (« International Components for Unicode », ICU) sont résumés dans une bibliothèque de programmes fournie par le Consortium Unicode. La bibliothèque est publiée sous une licence open source et peut être utilisée sur de nombreux systèmes d’exploitation. Le logiciel est utilisé pour l’internationalisation programmatique (« Internationalization », souvent abrégé en « i18n »). Ses domaines d’application comprennent :
- Le traitement des textes Unicode
- La prise en charge des expressions régulières en Unicode
- L’analyse et la mise en forme des dates, heures, nombres, devises et messages du calendrier
La bibliothèque ICU est disponible en deux versions :
- « icu4c » est écrite en C/C ++ et fournit une API pour ces langages.
- « icu4j » est écrite en Java et fournit une API pour ce langage.
L’utilisation des composants fournit des résultats consistants quelle que soit la plateforme.
Charset dans les méta-données en head d’un document HTML
La plupart des documents HTML actuels sont codés en caractères UTF-8. Pour s’assurer que le document s’affiche pour les visiteurs de la page sans caractères incorrects, un attribut de méta-donnée « charset » doit être placé en head (dans l’en-tête) du document HTML. Il demande au navigateur d’interpréter le document récupéré comme UTF-8. En voici un exemple :
<head>
<meta charset="utf-8">
<!-- autres éléments du header -->
</head>
Polices Twitter
Le service de messages courts Twitter n’autorise pas la mise en forme de texte pour les tweets, les profils ou les noms d’utilisateur. Les possibilités créatives des utilisateurs sont ainsi limitées. Cependant, des développeurs ingénieux ont trouvé une astuce. Twitter utilise Unicode partout et il est donc possible de composer un texte formaté à partir de caractères spéciaux. En particulier, des caractères ressemblant à des lettres latines sont utilisés. Le moyen le plus simple de générer un tel texte est d’utiliser un Générateur de polices Twitter.