Unicode

Unicode est un standard informatique qui permet des échanges de textes dans différentes langues, à un niveau mondial. Il est développé par le Consortium Unicode, qui vise au codage de texte écrit en donnant à tout caractère de n'importe quel système d'écriture un nom et un identifiant numérique, et ce de manière unifiée, quels que soient la plate-forme informatique ou le logiciel utilisé.

Logo Unicode.

Ce standard est lié à la norme ISO/CEI 10646 qui décrit une table de caractères équivalente. La dernière version, Unicode 13.0, a été publiée en [1].

Totalement compatible avec le jeu universel de caractères (JUC) de l'ISO/CEI 10646, le standard Unicode l'étend en lui ajoutant un modèle complet de représentation et de traitement de textes, en conférant à chaque caractère un jeu de propriétés (qui peuvent être soit pour certaines standardisées et stabilisées dans toutes les versions d'Unicode où le caractère a été encodé, soit informatives avec seulement une recommandation sur leur usage qui peut évoluer en fonction des nouveaux besoins trouvés). Ces propriétés décrivent avec précision les relations sémantiques qui peuvent exister entre plusieurs caractères successifs d'un texte, et permettent de standardiser ou recommander des algorithmes de traitement qui préservent au maximum la sémantique des textes transformés. Unicode a pour objet de rendre un même texte utilisable à l'identique sur des systèmes informatiques totalement différents.

Le standard Unicode est constitué d'un répertoire de 143 859 caractères, couvrant plus de 150 écritures, d'un ensemble de tableaux de codes pour référence visuelle, d'une méthode de codage et de plusieurs codages de caractères standard, d'une énumération des propriétés de caractère (lettres majuscules, minuscules, APL, symboles, ponctuation, etc.) d'un ensemble de fichiers de référence des données informatiques, et d'un certain nombre d'éléments liés, tels que des règles de normalisation, de décomposition, de tri, de rendu et d'ordre d'affichage bidirectionnel (pour l'affichage correct de texte contenant à la fois des caractères d'écritures de droite à gauche, comme l'arabe et l'hébreu, et de gauche à droite).

En pratique, Unicode reprend intégralement la norme ISO/CEI 10646, puisque cette dernière ne standardise que les caractères individuels en leur assignant un nom et un numéro normatif (appelé point de code) et une description informative très limitée, mais aucun traitement ni aucune spécification ou recommandation pour leur emploi dans l'écriture de langues réelles, ce que seul le standard Unicode définit précisément. L'ISO/CEI 10646 fait normativement référence à certaines parties du standard Unicode (notamment l'algorithme bidirectionnel et les propriétés des caractères (en)) ; Unicode est également une norme de facto pour le traitement du texte et sert de base à de nombreuses autres normes.

Langues écrites :

Alphabétique

Abjad (langues sémitiques)

But

Unicode, dont la première publication remonte à , a été développé dans le but de remplacer l'utilisation de pages de code nationales.

Ces pages de code avaient dans le passé quelques problèmes. Par exemple, sur les terminaux 3270 fonctionnant en EBCDIC : lorsqu'une note de service électronique comportait un caractère « signe monétaire », le même texte plafonnant une dépense en dollars pour le lecteur américain faisait afficher sur un écran britannique le même montant en livres sterling, puisque le signe monétaire était différent dans chacun des deux pays.

Dans la pratique, tous les systèmes d'écriture ne sont pas encore présents, car un travail de recherche documentaire auprès de spécialistes peut encore s'avérer nécessaire pour des caractères rares ou des systèmes d'écriture peu connus (parce que disparus, par exemple).

Cependant, les écritures les plus utilisées dans le monde sont représentées, ainsi que des règles sur la sémantique des caractères, leurs compositions et la manière de combiner ces différents systèmes. — Par exemple, comment insérer un système d'écriture de droite à gauche dans un système d'écriture de gauche à droite (texte bidirectionnel).

Standardisation

Interopérabilité

Sous sa forme UTF-8, l'Unicode offre une certaine interopérabilité avec le code ASCII.

Conformité

Le standard Unicode définit des exigences permettant d'évaluer la conformité de l'implémentation d'un processus (ou d'un logiciel) à Unicode[2][source insuffisante]. Ces exigences concernent notamment (dans la version 4.0) :

  • le traitement de Points de Code non assignés ;
  • l'interprétation des séquences de caractères équivalentes ;
  • ce qu'est une modification d'interprétation du texte ;
  • le codage des caractères ;
  • l'affichage du texte bidirectionnel ;
  • la normalisation ;
  • les algorithmes ;
  • la casse.

Ces exigences permettent le support d'un sous-ensemble d'Unicode.

Alors que l'ISO/CEI 10646 définit le même jeu de caractères qu'Unicode, la différence entre ISO/CEI 10646 et Unicode tient essentiellement dans le surplus d'exigence de conformité fourni par Unicode.

Limitations

Unicode est en 2016[3] le standard leader pour le codage informatique des caractères. Il sert à l'interopérabilité de logiciels, et permet par exemple de copier des textes utilisant des caractères de différents alphabets entre des logiciels différents, même n'ayant pas été spécifiquement conçus pour eux (par exemple un programme en caractères APL dans un texte LibreOffice ou dans un courriel sous Gmail). Tous les textes Unicode ne sont cependant pas codés de la même manière. Suivant la normalisation Unicode adoptée, un même signe graphique peut parfois être codé de différentes manières. Certains textes utilisent la convention NFC, d'autres la convention NFD, etc. Et le standard n'interdit pas de mélanger plusieurs conventions dans un même texte. Il en va de même des logiciels.

Cette coexistence de plusieurs façons d'écrire la même chose a été exploitée par les pirates dans les années 2000 en leur permettant de déjouer des filtres : les pirates contournaient les interdictions de certaines chaînes de caractères jugées dangereuses tout simplement en les codant sous une autre forme, plus inhabituelle et de ce fait parfois non filtrée.[réf. nécessaire]

Unicode répond à ces limitations en apportant la notion d'équivalence canonique.

Normes et versions

Le travail sur Unicode est parallèle et synchronisé avec celui sur la norme ISO/CEI 10646 dont les buts sont les mêmes. L'ISO/CEI 10646, une norme internationale publiée en français et en anglais, qui ne précise ni les règles de composition de caractères, ni les propriétés sémantiques des caractères.

Unicode aborde cependant la problématique de la casse, du classement alphabétique, et de la combinaison d'accents et de caractères. Depuis la version 1.1 d'Unicode et dans toutes les versions suivantes, les caractères ont les mêmes identifiants que ceux de la norme ISO/CEI 10646 : les répertoires sont maintenus parallèlement, à l'identique lors de leur standardisation définitive, les deux normes étant mises à jour presque simultanément. Les deux normes Unicode (depuis la version 1.1) et ISO/CEI 10646 assurent une compatibilité ascendante totale : tout texte conforme à une version antérieure doit rester conforme dans les versions ultérieures.

Ainsi les caractères de la version 3.0 d'Unicode sont ceux de la norme ISO/CEI 10646:2000. La version 3.2 d'Unicode classait 95 221 caractères, symboles et directives.

La version 4.1 d'Unicode, mise à jour en , contient :

  • 137 468 caractères à usage privé (assignés dans toutes les versions d'Unicode et suffisants pour tous les usages) ;
  • plus de 97 755 lettres ou syllabes, chiffres ou nombres, symboles divers, signes diacritiques et signes de ponctuation, avec parmi eux :
    • plus de 70 207 caractères idéographiques, et
      • parmi eux, 11 172 syllabes hangûl précomposées ; ainsi que
  • 8 258 points de codes réservés de façon permanente, interdits pour le codage de texte (assignés dans toutes les versions d'Unicode) ; et
  • plusieurs centaines de caractères de contrôle ou modificateurs spéciaux ;

soit un total de près de 245 000 points de codes assignés dans un espace pouvant contenir 1 114 112 codes différents.

Quelques problèmes semblent cependant exister, pour le codage des caractères chinois, à cause de l'unification des jeux idéographiques utilisés dans différentes langues, avec une calligraphie légèrement différente et parfois signifiante, mais ils sont en cours de résolution par Unicode qui a défini des sélecteurs de variantes et ouvert un registre de séquences normalisées qui les utilise.

VersionDate de publicationNouveaux caractères
1.0.0
1.0.1
1.1
2.0
2.1
3.0
3.1
3.2
4.0
4.1
5.0
5.1
5.2
6.0
6.1
7.02 834 nouveaux caractères dont les emojis[4].
8.07 716 caractères dont de nombreux emojis[5].
9.07 500 nouveaux caractères (dont 72 emojis)[6].
10.08 518 nouveaux caractères (dont 56 emojis)[7].
11.0684 nouveaux caractères (dont 66 emojis)[8].
12.0554 nouveaux caractères[9].
13.0 5 390 nouveaux caractères[10]

Couches d'Unicode

Unicode est défini suivant un modèle en couches (Note technique Unicode no 17[11]). Les autres normes ne faisaient typiquement pas de distinction entre le jeu de caractères et la représentation physique. Les couches sont ici présentées en partant de la plus haute (la plus éloignée de la machine).

Répertoire des caractères abstraits (astract character repertoire)

La couche la plus élevée est la définition du jeu de caractères. Par exemple, Latin-1 a un jeu de 256 caractères quand Unicode standardise actuellement près de 110 000 caractères. En outre, Unicode affecte une dénomination à chacun de ces caractères.

La liste des caractères avec leur nom constitue donc la couche applicative d'Unicode.

Par exemple, le caractère Ç est nommé « lettre majuscule latine c cédille ».

Cette définition est totalement identique à celle de l'ISO/CEI 10646, qui approuve toute extension du répertoire. Unicode ne reprend dans le texte de sa norme que les noms normatifs en anglais, mais la norme ISO/CEI 10646 est publiée en deux langues également normatives. Ainsi les noms en anglais et en français sont tous deux standardisés.

Dans les faits, toute extension du répertoire se fait aujourd'hui conjointement entre le groupe de travail responsable de l'ISO/CEI 10646 (JTC1/SC2/WG2, dont les membres votants sont uniquement des autorités de normalisation nationales des pays participants, ou leur représentant officiel), et le Comité technique Unicode UTC (dont les membres votants peuvent être n'importe quelle organisation privée ou d'intérêt public, ou même un gouvernement, qui a adhéré et paye une redevance annuelle permettant de participer à ces décisions).

Jeu de caractères codés (coded character set)

Ici, on ajoute à la table précédente un numéro associé à chaque caractère. Notons bien qu'il ne s'agit pas d'une représentation en mémoire, juste d'un nombre entier, appelé point de code. L'espace de codage de ces nombres est divisé en 17 zones de 65 536 points de code. Ces zones sont appelées plans.

Le point de code est noté "U+xxxx", où "xxxx" est en hexadécimal et comporte 4 à 6 chiffres :

  • 4 chiffres pour le premier plan, appelé plan multilingue de base (donc entre U+0000 et U+FFFF) ;
  • 5 chiffres pour les 15 plans suivants (entre U+10000 et U+FFFFF) ;
  • 6 chiffres pour le dernier plan (entre U+100000 et U+10FFFF).

Ainsi, le caractère nommé « Lettre majuscule latine c cédille » (Ç) a le numéro U+00C7. Il appartient au premier plan.

En principe tous les points de code entre U+0000 et U+10FFFF sont disponibles, mais certains intervalles sont perpétuellement réservés à des usages particuliers, notamment une zone d'indirection exclue pour permettre le codage UTF-16 (cf. infra), les zones à usage privé et quelques régions (par exemple U+FFFE ou U+FFFF) contenant des non-caractères dont l'usage est interdit dans un échange de données conforme. Les autres points de code sont soit déjà affectés à des caractères, soit réservés pour standardisation future.

Zone à usage privé : Unicode a assigné de nombreux points de code à des caractères valides mais dont la sémantique est inconnue car d'usage privé (par exemple les deux derniers plans entre U+F0000 et U+10FFFF sont entièrement dédiés à cet usage, hormis les deux points de code à la fin de chaque plan qui sont des non-caractères interdits dans un texte conforme).

Là encore, la standardisation du codage, c'est-à-dire l'affectation des points de codes aux caractères du répertoire commun est une décision conjointe partagée entre les normes Unicode et ISO/CEI 10646. Tous les caractères du répertoire disposent d'un point de code unique (même si pour certaines langues ou pour Unicode certains caractères sont considérés comme équivalents).

On peut noter que si le répertoire des caractères est extensible, il est limité par la borne supérieure de l'espace de codage : U+10FFFF. Une grande majorité des points de code possibles n'est associée à aucun caractère particulier, mais peut l'être à tout moment.

Aussi ces points de code encore libres ne sont pas considérés comme invalides mais représentent bien des caractères abstraits (non encore spécifiés, et temporairement réservés). Ces caractères abstraits (de même que les caractères à usage privé) complètent le jeu de caractères codés du répertoire standardisé pour former un jeu unique dit « jeu de caractères codés universel » (Universal Coded Character Set, souvent abrégé en UCS) qui contient tous les jeux de caractères codés des répertoires de chacune des versions passées, présentes et futures de l'ISO/CEI 10646 et d'Unicode (depuis la version 1.1 uniquement).

Formalisme de codage des caractères (character encoding form)

Cette fois, nous arrivons à une représentation physique (en mémoire, sur disque…) : cette couche spécifie quelle unité de codage (code units), ou codet, va représenter un caractère ou plus exactement un point de code : octet, seizet (en) (mot de 16 bits) ou trente-deuzet (en) (mot de 32 bits).

Il peut exister (et il existe) plusieurs de ces formalismes. Un formalisme particulier doit préciser la taille de l'unité de codage et indiquer de quelle façon le nombre entier représentant un point de code est représenté en une suite d'unités de codage − et inversement, c'est-à-dire comment retrouver le point de code étant donnée une suite d'unités de codage.

Mécanisme de sérialisation des caractères (character encoding scheme)

Cette couche s'occupe de sérialiser les suites d'unités de codage définies par la couche précédente en suites d'octets. C'est ici que se choisit l'ordre des octets entre les ordres gros-boutien (octet le plus significatif d'abord) et petit-boutien (octet le moins significatif d'abord).

C'est également à cette étape qu'il est possible d'ajouter un indicateur d'ordre des octets (ou BOM, pour byte order mark), qui permet d'indiquer en début de fichier ou de flot de données s'il est en gros-boutien ou en petit-boutien. Dans le monde Internet, on l'utilise rarement, en préférant un marquage explicite (« charset=UTF-16BE » en MIME, par exemple, pour indiquer un flot de données gros-boutien, où BE signifie big endian).

Surcodage de transfert (transfer encoding syntax)

Ici, interviennent optionnellement les mécanismes de compression ou de chiffrement.

Il peut aussi y avoir un surcodage comme pour le LDAP qui spécifie que les chaînes Unicode doivent être codées en UTF-8 et surcodées en Base64.

Limite de l'octet

Pour s'affranchir des contraintes rigides des normes précédentes (une suite de bits, une représentation), Unicode sépare dorénavant d'une part la définition du jeu de caractères (liste des caractères par leur nom) et leur index, le point de code, de celle du codage. Ainsi, on ne peut donc pas parler de la taille d'un caractère Unicode, car elle dépend du codage choisi, et celui-ci peut donc varier à volonté. En pratique, UTF-8 est très utilisé dans les pays occidentaux.

Là où l'ASCII utilise bits et ISO/CEI 8859-1 8 bits (comme la plupart des pages de codes nationales), Unicode, qui rassemble les caractères de chaque page de code, avait besoin d'utiliser plus que les 8 bits d'un octet. La limite fut dans un premier temps fixée à 16 bits pour les premières versions d'Unicode, et à 32 bits pour les premières versions de la norme ISO/CEI 10646.

La limite actuelle est désormais placée entre 20 et 21 bits par point de code assigné aux caractères standardisés dans les deux normes, désormais mutuellement compatibles :

  • Le groupe de travail international de l'ISO standardise l'assignation des points de code aux caractères, leur nom officiel et réserve les blocs de points de code utilisés par chaque écriture ou groupe d'écritures. Il documente aussi une représentation graphique possible (indicative) pour chaque caractère (cette représentation graphique étant si possible non ambiguë grâce au placement des caractères standardisés dans les blocs de code appropriés pour un nombre limité d'écritures).
  • Le groupe de travail du Consortium Unicode normalise plus précisément (dans la norme Unicode) leur sémantique pour les traitements automatisés grâce aux tables de propriétés des caractères, et la mise au point d'algorithmes standards utilisant ces propriétés.
  • Les deux organismes de normalisation collaborent pour synchroniser en permanence leur répertoire standardisé dans des versions officielles référencées mutuellement, et travaillent ensemble pour les amendements (les versions ne devenant officielles qu'une fois que les deux organismes ont chacun approuvé et complètement défini les additions de nouveaux caractères).
  • En pratique, pour la plupart des développeurs d'applications, la norme ISO/CEI 10646 apparaît comme un sous-ensemble de la norme Unicode plus complète, mais dispose des mêmes points de code pour exactement le même jeu de caractères que ceux de la norme Unicode (c'est pourquoi la norme Unicode est plus connue car plus appropriée pour les traitements informatisés, ainsi que consultable gratuitement sur Internet).

Universal Transformation Format (UTF)

Unicode et ISO/CEI 10646 acceptent plusieurs formes de transformation universelle pour représenter un point de code valide. Citons :

Le nombre après UTF représente le nombre minimal de bits des codets avec lesquels un point de code valide est représenté.

Ces transformations ont été initialement créées pour la représentation interne et les schémas de codage des points de code de la norme ISO/CEI 10646, qui au départ pouvait définir des points de code sur 31 bits. Depuis, la norme ISO/CEI 10646 a été amendée, afin que les trois formes soient totalement compatibles entre elles et permettent de coder tous les points de code (car UTF-16 ne permet de représenter que les points de code des 17 premiers plans).

Unicode a standardisé également de façon très stricte ces trois formes de transformation de tous les points de code valides (U+0000 à U+D7FF et U+E000 à U+10FFFF) et uniquement eux, que ce soit pour représenter du texte sous forme de suites de points de code, ou des points de code assignés aux caractères valides, ou réservés, ou assignés à des non-caractères. Les points de code assignés aux demi-zones (U+D800 à U+DFFF), utilisés uniquement en UTF-16, sont invalides isolément puisqu'il servent à la représentation, par un couple de 2 codets de 16 bits, des points de code des 16 plans supplémentaires.

UTF-8

L'UTF-8, spécifié dans le RFC 3629[12], est le plus commun pour les applications Unix et Internet. Son codage de taille variable lui permet d'être en moyenne moins coûteux en occupation mémoire (pour les langues à alphabet latin). Mais cela ralentit nettement les opérations où interviennent des extractions de sous-chaînes dans certains langages qui indexent des chaînes par des entiers (exemple = "815e caractère de la chaîne"), car il faut compter les caractères depuis le début de la chaîne pour savoir où se trouve le premier caractère à extraire.

L'UTF-8 assure aussi, et c'est son principal avantage, une compatibilité avec les manipulations simples de chaînes en ASCII dans les langages de programmation. Ainsi, les programmes écrits en C peuvent souvent fonctionner sans modification.

Initialement, l'UTF-8 pouvait coder n'importe quel point de code entre U+0000 et U+7FFFFFFF (donc jusqu'à 31 bits). Cet usage est déprécié et la norme ISO/CEI 10646 a été amendée pour ne plus supporter que les points de code valides des 17 premiers plans, sauf ceux de la demi-zone correspondant aux codets utilisés en UTF-16 pour la représentation sur deux codets des points de code des 16 plans supplémentaires. Aussi les séquences les plus longues en UTF-8 nécessitent au maximum 4 octets, au lieu de 6 précédemment. De plus, UTF-8 a été amendé d'abord par Unicode puis par l'ISO/CEI 10646 pour ne plus accepter que la représentation la plus courte de chaque point de code (unicité du codage). Le fait de pouvoir représenter de plusieurs façons différentes un même caractère posait des problèmes de sécurité, car le pirate pouvait contourner par une écriture différente une forme "filtrée".

Son avantage sur l'UTF-16 (et l'UTF-32) est que les différences d'ordonnancement des octets composant un mot (endianness) ne posent pas de problème dans un réseau de systèmes hétérogènes ; ainsi, cette transformation est utilisée aujourd'hui par la plupart des protocoles d'échange standardisés.

D'autre part, l'UTF-8 est totalement compatible pour la transmission de textes par des protocoles basés sur le jeu de caractères ASCII, ou peut être rendu compatible (au prix d'une transformation sur plusieurs octets des caractères non-ASCII) avec les protocoles d'échange supportant les jeux de caractères codés sur 8 bits (qu'ils soient basés sur ISO/CEI 8859 ou de nombreux autres jeux de caractères codés sur 8 bits définis par des normes nationales ou des systèmes propriétaires particuliers).

Son principal défaut est le codage de longueur très variable (1 octet pour les points de code assignés aux caractères ASCII–ISO/CEI 646, 2 à 4 octets pour les autres points de code), même si l'auto-synchronisation propre à l'encodage UTF-8 permet de déterminer le début d'une séquence à partir d'une position aléatoire (en effectuant au plus 3 lectures supplémentaires des codets qui précèdent). Cependant, cet encodage n'est pas conçu pour faciliter le traitement des chaînes de caractères : on lui préfère alors souvent l'UTF-16, parfois l'UTF-32 (gourmand en mémoire).

Dérivés
  • Certains programmes (par exemple, la base de données Oracle) représentant en interne leurs données Unicode au format UTF-16 ont (ou ont connu) un défaut de conversion vers UTF-8 : un caractère compris entre U+10000 et U+10FFFF, stocké sur deux mots de 16 bits, se retrouve converti en UTF-8 comme étant une suite de deux caractères Unicode. Cela a amené la création « accidentelle » du CESU-8 et a pour avantage de faciliter l'usage d'Unicode sur des plates-formes 16 bits.
  • Le caractère Unicode nul U+0000 est codé en UTF-8 sous forme d'un unique octet nul 0x00. Selon le standard Unicode, ce caractère n'a aucune signification particulière[13] ; toutefois (pour des raisons conceptuelles historiques), les bibliothèques de traitement de chaînes du langage C considèrent ce caractère de contrôle comme une fin de chaîne, ce qui complique l'implémentation de certains cas d'application[réf. nécessaire]. Sous la plate-forme Java, la version « (en) Modified UTF-8 » est née en reprenant l'avantage de la portabilité « 16 bits » du CESU-8 et en y ajoutant la possibilité d’encoder U+0000 sous la séquence 0xC0 0x80 (normalement interdite en UTF-8[14]) : en échangeant de la sorte avec les bibliothèques C natives de la plateforme supportée, la plate-forme peut gérer facilement tous les textes Unicode valides ainsi que les fichiers de classes compilées (format alternatif portable, indépendant de l’endianness et de la taille des mots).

UTF-16

L'UTF-16 est un bon compromis lorsque la place mémoire n'est pas trop restreinte, car la grande majorité des caractères Unicode assignés pour les écritures des langues modernes (dont les caractères les plus fréquemment utilisés) le sont dans le plan multilingue de base et peuvent donc être représentés sur 16 bits. La version française de l'ISO/CEI 10646 nomme ces mots de 16 bits des « seizets », mais la version internationale les décrit cependant bien comme de classiques mots de 16 bits composés de deux octets, et soumis aux règles usuelles de boutisme.

Codage UTF-16
hi \ lo DC00 DC01        DFFF
D800 1000010001103FF
D801 1040010401107FF
  
DBFF 10FC0010FC0110FFFF

Les points de code des seize plans supplémentaires nécessitent une transformation sur deux mots de 16 bits :

  • on soustrait 0x10000 au point de code, ce qui laisse un nombre de 20 bits dans l'étendue 0x00 à 0xFFFFF ;
  • les 10 bits de poids fort (un nombre entre 0x00 et 0x3FF) sont additionnés à 0xD800, et donnent la première unité de code dans la demi-zone haute (0xD800 à 0xDBFF) ;
  • les 10 bits de poids faible (un nombre entre 0x00 et 0x3FF) sont additionnés à 0xDC00, et donnent la seconde unité de code dans la demi-zone basse (0xDC00 à 0xDFFF) ;

Comme la plupart des caractères couramment usités résident dans le plan de base, l'encodage des plans supplémentaires est souvent peu testé dans les logiciels, conduisant à des bugs ou des problèmes de sécurité même dans des logiciels largement diffusés[15]. Certains cadres légaux, tels le GB 18030, peuvent demander le support des plans supplémentaires, ceux-ci contenant notamment des caractères présents dans les noms propres.

Il est possible de déterminer le début de la séquence de codage à partir d'un point quelconque d'un texte représenté en UTF-16 en effectuant au maximum une lecture supplémentaire, uniquement si ce codet est dans la demi-zone basse. Cette forme est plus économique et plus facile à traiter rapidement que l'UTF-8 pour la représentation de textes contenant peu de caractères ASCII (U+0000 à U+007F).

Toutefois, cette transformation possède deux schémas de codage incompatibles qui dépendent de l'ordonnancement des octets dans la représentation d'entiers sur 16 bits. Pour résoudre cette ambiguïté et permettre la transmission entre systèmes hétérogènes, il est nécessaire d'adjoindre une information indiquant le schéma de codage utilisé (UTF-16BE ou UTF-16LE), ou bien de préfixer le texte codé avec la représentation du point de code valide U+FEFF (assigné au caractère « espace insécable de largeur nulle », un caractère aujourd'hui réservé à ce seul usage en tant que marqueur d'ordonnancement des octets), puisque le point de code « renversé » U+FFFE valide est un non-caractère, interdit dans les textes conformes à Unicode et ISO/CEI 10646.

L'autre défaut d'UTF-16 est qu'un texte transformé avec lui et transmis avec l'un ou l'autre des deux schémas de codage contient un grand nombre d'octets nuls ou ayant une valeur en conflit avec les valeurs d'octets réservées par certains protocoles d'échange.

C'est notamment le codage qu'utilise la plate-forme Java en interne, ainsi que Windows pour ses APIs compatibles Unicode (avec le type wchar).

UTF-32

L'UTF-32 est utilisé lorsque la place mémoire n'est pas un problème et que l'on a besoin d'avoir accès à des caractères de manière directe et sans changement de taille (hiéroglyphes égyptiens).

L'avantage de cette transformation standardisée est que tous les codets ont la même taille. Il n'est donc pas nécessaire de lire des codets supplémentaires pour déterminer le début de la représentation d'un point de code.

Toutefois, ce format est particulièrement peu économique (y compris en mémoire) puisqu'il « gaspille » inutilement au moins un octet (toujours nul) par caractère. La taille en mémoire d'un texte joue négativement sur les performances puisque cela nécessite plus de lectures et écritures sur disque en cas de saturation de la mémoire vive, et que cela diminue aussi les performances du cache mémoire des processeurs.

Pour les textes écrits dans les langues modernes actuelles (hormis certains caractères rares du plan idéographique supplémentaire) et n'utilisant donc que les points de code du plan multilingue de base, cette transformation double la quantité mémoire nécessaire par rapport à l'UTF-16.

Comme l'UTF-16, l'UTF-32 possède plusieurs schémas de codage dépendant de l'ordonnancement des octets composant un entier de plus de 8 bits (deux schémas de codage de l'UTF-32 sont standardisés, UTF-32BE et UTF-32LE). Il est donc aussi nécessaire de préciser ce schéma de codage, ou de le déterminer en préfixant le texte par la représentation en UTF-32 du point de code U+FEFF. Comme l'UTF-16, la présence d'octets nuls dans les schémas de codage standardisés de l'UTF-32 le rend incompatible avec de nombreux protocoles d'échange entre systèmes hétérogènes.

Aussi ce format n'est utilisé le plus souvent que très localement pour certains traitements en tant que forme intermédiaire plus facile à manipuler, et on lui préfère souvent la transformation UTF-16 souvent plus performante pour traiter et stocker des quantités importantes de textes, la conversion entre les deux étant très simple à réaliser, et très peu coûteuse en termes de complexité de traitement.

En fait, de très nombreuses bibliothèques de traitement de textes sont écrites uniquement avec l'UTF-16 et sont plus performantes qu'en UTF-32, même lorsque les textes contiennent des caractères des plans supplémentaires (car ce cas de figure reste rare dans la très grande majorité des cas).

On notera toutefois que la transformation en UTF-32 utilise des codets sur 32 bits, dont de très nombreuses valeurs peuvent ne représenter aucun point de code valide (valeurs hors des deux intervalles représentant les points de code valides U+0000 à U+D7FF et U+E000 à U+10FFFF), donc aucun caractère valide ou réservé (toute information qui y serait contenue ne peut donc pas être du texte au sens d'Unicode). La transmission de textes utilisant ces valeurs invalides de codets dans un des schémas de codage standardisés de l'UTF-32 est interdite pour tout système conforme à Unicode (il faut utiliser plutôt les points de code à usage privé), puisqu'il sera impossible de les représenter dans une autre transformation UTF avec lesquelles les trois UTF standardisées sont bijectivement compatibles.

Norme chinoise GB 18030

Il s'agit d'une transformation de l'Unicode qui n'est pas définie par le Consortium Unicode, mais par l'administration de normalisation en Chine, où son support est obligatoire dans les applications. Historiquement c'était un jeu de caractères codé, qui a été étendu pour supporter l'intégralité du répertoire UCS par une transformation algorithmique complétant une large table de correspondance d'un code à l'autre.

Polices de caractères Unicode

Affirmer qu'Unicode code des caractères revient à affirmer qu'il attribue un numéro à des symboles abstraits, selon un principe de codage logique. Unicode ne code en revanche pas les représentations graphiques des caractères, les glyphes. Il n'y a donc pas une bijection entre la représentation du caractère et son numéro, puisque toutes les variantes graphiques de style sont unifiées.

De plus, contrairement à une police ASCII ou latin-1 classique, la sélection d'un glyphe par un code n'est pas unique et est souvent contextuelle, et peut aussi afficher le même glyphe pour des codes différents. Ainsi, le caractère français « é » peut être décrit de deux manières : soit en utilisant directement le numéro correspondant au « é », soit en faisant suivre le numéro du « e » par celui de l'accent aigu sans chasse. Quelle que soit l'option choisie, le même glyphe sera affiché. On dira du premier caractère qu'il est précomposé, du second que c'est une composition (deux caractères forment un seul glyphe composé des deux). Ceci est autorisé et même hautement recommandé car les différentes formes de codage sont classées par Unicode comme « canoniquement équivalentes », ce qui signifie que deux formes de codage équivalentes devraient être traitées de façon identique.

De nombreux caractères composites sont dans ce cas et peuvent être codés de ces deux manières (ou plus, certains caractères composés pouvant être décomposés de plusieurs façons, notamment quand ils comportent plusieurs signes diacritiques). Le plus souvent, le caractère précomposé est préférable pour le codage du texte, si celui-ci existe (c'est le cas pour le grec polytonique, par exemple, lequel, codé en décomposition, peut ne pas être satisfaisant graphiquement : selon les polices de caractères, les différents constituants du glyphe étant parfois mal disposés et peu lisibles). Toutefois, tous les caractères composites ne disposent pas d'un point de code unique pour leur forme précomposée.

De même, certains systèmes d'écriture, comme la devânagarî, le persan ou l'arabe, nécessitent un traitement complexe des ligatures : les graphèmes changent de forme en fonction de leur position ou de leurs voisins (voir Variante contextuelle et Lettre conjointe). La sélection du glyphe correct nécessite un traitement permettant de déterminer la forme contextuelle à sélectionner dans la police, alors même que toutes les formes contextuelles sont codées de façon identique en Unicode.

Pour ces raisons, une police Unicode doit être maniée avec prudence. Par exemple, une police comportant tous les glyphes existants ne suffit pas. Il faut également que le système d'affichage (le moteur de rendu) possède les mécanismes à même de traiter les ligatures, variantes contextuelles et formes conjointes propres à certaines langues. À l'inverse, une police qui ne représente qu'une partie des caractères mais sait les afficher correctement, mérite mieux le titre de « police Unicode ». Enfin, certaines contraintes techniques des formats de polices peuvent les empêcher de supporter la totalité du répertoire. En pratique, il est impossible (en 2009) de trouver une police de caractères unique supportant l'ensemble du répertoire.

Une police de caractères Unicode est donc seulement une police permettant d'afficher directement un texte codé selon toutes les formes autorisées par Unicode, et permettant de supporter un sous-ensemble cohérent adapté à une ou plusieurs langues pour supporter une ou plusieurs écritures. Aucune police de caractère Unicode ne peut « fonctionner » seule, et le support complet de l'écriture nécessite un support de celles-ci dans un moteur de rendu, capable de détecter les formes de codage équivalentes, rechercher les formes contextuelles dans le texte et sélectionner les différents glyphes d'une police codée avec Unicode, en s'aidant au besoin de tables de correspondances incluses dans la police elle-même.

Détails techniques

Bibliothèques logicielles

La bibliothèque logicielle multiplate-forme ICU permet de manipuler des données encodées avec Unicode. Un support d'Unicode spécifique à certaines plates-formes est également intégré par les systèmes modernes (Java, Microsoft Windows, GNU/Linux, bibliothèques standards C/C++, Python, etc.).

Les types à utiliser pour stocker des variables Unicode, sont les suivants :

Types compatibles avec Unicode dans les langages de programmation
Langage de programmation Type pour un seul caractère Type pour tout texte
C char[4][alpha 1] ou wchar_t[2][alpha 2] char[] ou wchar_t[]
C++ char[4][alpha 1] ou wchar_t[2][alpha 1] char[] ou wchar_t[] ou std::string ou std::wstring
Java char[2] ou int[alpha 3] char[] ou String
Bibliothèque ICU (pour C/C++ ou Java) UChar UChar[] ou String, UnicodeString
JavaScript ou ECMAScript char[alpha 4] string
C# ou J# char string
Delphi char[4][alpha 1] ou widechar[2] string[alpha 1] ou widestring
Python 2 unicode
Python 3 str
Go rune (=int32) string ou []byte
Swift Character String

Notes

  1. En UTF-8
  2. On notera toutefois que le type wchar_t du langage C ne permet pas toujours de coder tous les caractères Unicode, car la norme de ce langage ne prévoit pas de nombre minimum suffisante pour ce type standard. Cependant, de nombreux compilateurs du langage définissent wchar_t sur 32 bits (voire 64 bits sur les environnements manipulant les entiers standards sur 64 bits), ce qui suffit pour stocker n'importe quel point de code Unicode standardisé. Mais d'autres compilateurs représentent wchar_t sur 16 bits (notamment sous Windows en environnement 16 ou 32 bits), voire sur 8 bits seulement (notamment dans les environnements embarqués ne disposant pas d'un système d'exploitation d'usage général) car wchar_t peut utiliser la même représentation que le type char qui compte un minimum de 8 bits.
  3. De manière similaire au C et au C++, le langage Java dispose de type unitaire permettant de coder 16 bits, mais ne permettant pas de coder un seul point de code d'une valeur quelconque (le type natif char est un entier positif sur 16 bits seulement). Pour manipuler les caractères standardisés hors du premier plan, il faut utiliser une paire de codets, chacun contenant une valeur égale aux deux codets définis par la forme UTF-16. Aussi les types d'objets String ou char[2] sont les plus appropriés pour représenter un caractère Unicode. Depuis Java 1.4.1, la bibliothèque standard fournit un support complet d'Unicode grâce au type natif int (qui est un entier défini sur 32 bits) et aux méthodes statiques de la classe standard Character (cependant un objet instancié de ce type Character ne permet pas, tout comme le type natif char, de stocker n'importe quel point de code).
  4. JavaScript comporte diverses implémentations non standardisées dont certaines plus anciennes ne supportent pas plus de 16 bits par caractère, et parfois seulement 8 bits. Toutefois, la norme ECMAScript de ce langage définit une classe utilitaire Character sur 32 bits (en fait basée sur la classe Number) devant supporter tous les points de code des 17 plans standardisés, tandis que les chaines de caractères utilise des caractères codés obligatoirement sur 16 bits (mais sans restriction renforçant l'appariement des unités de code UTF-16, les chaînes ECMAScript de type String n'étant pas restreintes au seul codage UTF-16 mais étant des vecteurs de constantes entières codées sur 16 bits sans restriction, afin d'assurer l'interopérabilité avec Java et d'autres langages qui eux non plus ne renforcent pas les restrictions de conformité UTF-16 dans leurs types natifs de données). Ces deux langages ne supportent pas de typage explicite des variables, le type étant défini dynamiquement par les valeurs qu'on leur assigne (aussi, plusieurs représentations internes sont possibles, leurs différences étant normalement transparentes pour le programmeur).

Unicode souffre toutefois encore d'un faible support des expressions rationnelles par certains logiciels, même si des bibliothèques comme ICU et Java peuvent les supporter. Un tel support n'a pas encore été standardisé pour ECMAScript et n'est fourni qu'avec l'aide de bibliothèques créées avec le langage ou des interfaces d'interopérabilité avec d'autres systèmes (notamment avec CORBA, COM) ou langages (notamment C++ et Java).

Partitionnement

Le partitionnement à jour peut être trouvé sur le site officiel d'Unicode. Cependant, étant donné le rôle important d'Unicode actuellement (ISO/CEI 10646), on décrira ici les principaux blocs de caractères. Les noms français sont les noms officiels d'ISO/CEI 10646, la norme internationale bilingue qui reprend les mêmes caractères qu'Unicode. Ils sont aussi officiels que les noms anglais.

L'ancienne norme Unicode 1.0 est obsolète et incompatible avec la norme ISO/CEI 10646 et la norme Unicode 1.1 et toutes ses versions ultérieures ; la principale incompatibilité est celle des blocs de caractères Hangul utilisés pour l'écriture de la langue coréenne qui ont changé de position et dont les anciens points de code ont depuis été assignés à d'autres blocs. La table ci-dessous est compatible avec ISO/CEI 10646 (toutes versions) et Unicode 1.1 (ou ultérieur).

N.B. La casse des noms de bloc n'est pas normative. « Latin de base » est donc équivalent à « LATIN DE BASE ».

Dans les tableaux suivants, tout nom de bloc ayant une note ramenant à un PDF officiel Unicode signifie que la page Wikipédia associée à ce bloc est inexistante ou erronée.

Plan multilingue de base (PMB, 0000 à FFFF)

Points de code Nom officiel du bloc PDF officiel En savoir plus
Début Fin
0000007FCommandes C0 et latin de baseU0000voir ISO/CEI 646, ASCII, Alphabet latin, Caractères de contrôle Unicode
008000FFCommandes C1 et supplément Latin-1U0080voir ISO/CEI 8859, ISO/CEI 8859-1, Alphabet latin, Caractères de contrôle Unicode
0100017FLatin étendu AU0100voir Alphabet latin
0180024FLatin étendu BU0180voir Alphabet latin
025002AFAlphabet phonétique international (API)U0250voir Alphabet phonétique international
02B002FFLettres modificatives avec chasseU02B0voir Diacritique, Alphabet latin, Diacritiques de l'alphabet latin, Alphabet phonétique international
0300036FDiacritiquesU0300voir Diacritique, Diacritiques de l'alphabet latin, Diacritiques de l'alphabet grec, Alphabet copte, Diacritiques de l'alphabet cyrillique
037003FFGrec et copteU0370voir Alphabet grec et Alphabet copte
040004FFCyrilliqueU0400voir Alphabet cyrillique
0500052FSupplément cyrilliqueU0500voir Alphabet cyrillique
0530058FArménienU0530voir Alphabet arménien
059005FFHébreuU0590voir Alphabet hébreu, Diacritique, Diacritiques de l'alphabet hébreu
060006FFArabeU0600voir Alphabet arabe
0700074FSyriaqueU0700voir Syriaque
0750077FSupplément ArabeU0750voir Alphabet arabe
078007BFThânaU0780voir Alphabet Maldivien
07C007FFN’koU07C0voir N'ko
0800083FSamaritainU0800voir Alphabet samaritain
0840085FMandéenU0840voir Alphabet mandéen
0860086FSupplément SyriaqueU0860voir Syriaque
0870089FRéservé--
08A008FFArabe étendu AU08A0voir Alphabet arabe, Diacritique, Diacritiques de l'alphabet arabe
0900097FDévanâgarîU0900voir Dévanâgarî
098009FFBengaliU0980voir Bengalî
0A000A7FGourmoukhîU0A00voir Gurmukhī
0A800AFFGoudjerateU0A80voir Alphabet gujarâtî
0B000B7FOriyaU0B00voir Oriya
0B800BFFTamoulU0B80voir Tamoul
0C000C7FTélougouU0C00voir Télougou
0C800CFFKannaraU0C80voir Kannara
0D000D7FMalayalamU0D00voir Malayalam
0D800DFFSinghalaisU0D80voir Singhalais
0E000E7FThaiU0E00voir Thaï
0E800EFFLaoU0E80voir Lao
0F000FFFTibétainU0F00voir Tibétain
1000109FBirmanU1000voir Birman
10A010FFGéorgienU10A0voir Géorgien, Alphabet géorgien
110011FFJamos hangûlU1100voir Hangûl
1200137FÉthiopienU1200voir Alphasyllabaire guèze
1380139FSupplément éthiopienU1380voir Alphasyllabaire guèze
13A013FFCherokeeU13B0voir Syllabaire cherokee
1400167FSyllabaires autochtones canadiens unifiésU1400voir Langues amérindiennes
1680169FOgamU1680voir Alphabet oghamique
16A016FFRunesU16A0voir Alphabet runique
1700171FTagalogU1700voir Tagalog
1720173FHanounóoU1720voir Alphabet Hanunóo (en)
1740175FBouhideU1740voir Bouhide (en)
1760177FTagbanouaU1760voir Alphabet Tagbanoua (en)
178017FFKhmerU1780voir Khmer
180018AFMongolU1800voir Mongol
18B018FFSyllabaires autochtones canadiens étendusU18B0voir Langues amérindiennes
1900194FLimbouU1900voir Limbou
1950197FTaï-leU1950voir Taï-le
198019DFNouveau Taï lüU1980voir Tai lü
19E019FFSymboles khmersU19E0voir Khmer
1A001A1FBouguiU1A00voir Bouguinais, Écriture lontara
1A201AAFTaï thamU1A20voir Alphabet Taï Tham (en)
1AB01AFFDiacritiques étenduU1AB0voir Diacritique
1B001B7FBalinaisU1B00voir Écriture balinaise
1B801BBFSoundanaisU1B80voir Soundanais, Alphabet Soudanais (en)
1BC01BFFBatakU1BC0voir Écriture batak
1C001C4FLepchaU1C00voir Alphabet Lepch (en)
1C501C7FOl chikiU1C50voir Alphabet santâlî
1C801C8FCyrillique étendu CU1C80voir Alphabet cyrillique, Slavon d'église
1C901CBFGéorgien étenduU1C90voir Géorgien, Alphabet géorgien
1CC01CCFSupplément soundanaisU1CC0voir Soundanais, Alphabet Soudanais (en)
1CD01CFFExtensions védiquesU1CD0voir Sanskrit
1D001D7FSupplément phonétiqueU1D00voir Alphabet phonétique international
1D801DBFSupplément phonétique étenduU1D80voir Alphabet phonétique international
1DC01DFFSupplément de diacritiquesU1DC0voir Diacritique
1E001EFFLatin étendu additionnelU1E00voir Alphabet latin
1F001FFFGrec étenduU1F00voir Alphabet grec, Grec polytonique
2000206FPonctuation généraleU2000voir Ponctuation, Espace
2070209FExposants et indicesU2070voir Exposant et Indice
20A020CFSymboles monétairesU20A0voir Symbole monétaire
20D020FFSignes combinatoires pour symbolesU20D0voir Flèche, rotation
2100214FSymboles de type lettreU2100voir Température, Symbole mathématique, Symboles du droit des marques
2150218FFormes numéralesU2150voir Numération romaine, Fraction
219021FFFlèchesU2190voir Flèche
220022FFOpérateurs mathématiquesU2200voir Opérateurs mathématiques
230023FFSignes techniques diversU2300voir Alphabet grec, Ponctuation, Flèche, Symboles Mathématiques, Emoji
2400243FPictogrammes de commandeU2400voir ISO/CEI 8859, ISO/CEI 646, Contrôle C0 (en)
2440245FReconnaissance optique de caractèresU2430voir Reconnaissance optique de caractères
246024FFAlphanumériques cerclésU2460voir Alphabet latin, Chiffres arabes
2500257FFiletsU2500voir Caractère de dessin de forme (en)
2580259FPavésU2580voir Caractère de dessin de forme (en), Rectangle
25A025FFFormes géométriquesU25A0voir Forme géométrique
260026FFSymboles diversU2600voir Symbole, Emoji, Jeu de cartes français, Échecs, Symbole de genre
270027BFCasseauU2700voir Symbole, Chiffres arabe, Ponctuation, Emoji, Opérateurs mathématiques, Flèche
27C027EFSymboles mathématiques divers AU27C0voir Symbole mathématique
27F027FFSupplément A de flèchesU27F0voir Flèche
280028FFCombinaisons BrailleU2800voir Braille
2900297FSupplément B de flèchesU2900voir Flèche
298029FFSymboles mathématiques divers BU2980voir Symbole mathématique
2A002AFFOpérateurs mathématiques supplémentairesU2A00voir Opérateurs mathématiques
2B002BFFDivers symboles et flèchesU2B00voir Flèche, Emoji
2C002C5FGlagotiqueU2C00voir Alphabet glagolitique
2C602C7FLatin étendu CU2C00voir Alphabet Latin, Ouïghour
2C802CFFCopteU2C80voir Alphabet copte
2D002D2FSupplément géorgienU2D00voir Géorgien, Alphabet géorgien
2D302D7FTifinaghU2D30voir Tifinagh et Langues berbères
2D802DDFÉthiopien étenduU2D80voir Alphasyllabaire guèze
2DE02DFFCyrillique étendu AU2DE0voir Alphabet cyrillique, Diacritique, Diacritiques de l'alphabet cyrillique
2E002E7FSupplément de ponctuationU2E00voir Ponctuation
2E802EFFFormes supplémentaires des clés CJCU2E80voir Chinois, japonais et coréen, Sinogramme, Chinois écrit, Langues chinoises, Écritures du japonais, Japonais, Hanja, Coréen
2F002FDFClés chinoises KangxiU2F00voir Dictionnaire de caractères de Kangxi
2FE02FEFRéservé--
2FF02FFFDescription idéographiqueU2FF0voir Description idéographique
3000303FSymboles et ponctuation CJCU3000voir Ponctuation, Chinois, japonais et coréen, Sinogramme, Chinois écrit, Langues chinoises, Écritures du japonais, Japonais, Hanja, Coréen
3040309FHiraganaU3040voir Hiragana, Écritures du japonais, Japonais
30A030FFKatakanaU30A0voir Katakana, Écritures du japonais, Japonais
3100312FBopomofoU3100voir Bopomofo, Chinois, japonais et coréen, Sinogramme
3130318FJamos de compatibilité hangûlU3130voir Hangûl, Sinogramme, Coréen
3190319FKanbunU3190voir Kanbun, Sinogramme
31A031BFBopomofo étenduU31A0voir Bopomofo, Sinogramme
31C031EFTraits CJCU31C0voir Chinois, japonais et coréen, Sinogramme, Chinois écrit, Langues chinoises, Écritures du japonais, Japonais, Hanja, Coréen
31F031FFExtension phonétique katakanaU31F0voir Katakana, Écritures du japonais, Japonais
320032FFLettres et mois CJC cerclésU3200voir Chiffres arabes,Chinois, japonais et coréen, Sinogramme, Chinois écrit, Langues chinoises, Écritures du japonais, Japonais, Hanja, Coréen
330033FFCompatibilité CJCU3000voir Unité de mesure, Chinois, japonais et coréen, Sinogramme, Chinois écrit, Langues chinoises, Écritures du japonais, Japonais, Hanja, Coréen
34004DBFSupplément A aux Idéogrammes unifiés CJC
(Partie 1) (Partie 2)
U3400voir Chinois, japonais et coréen, Sinogramme, Chinois écrit, Langues chinoises, Écritures du japonais, Japonais, Hanja, Coréen
4DC04DFFHexagrammes du Classique des mutations ou Yi JingU4DC0voir Yi Jing, Hexagramme, Chinois, japonais et coréen, Sinogramme
4E009FFFIdéogrammes unifiés CJC
(Partie 1) (Partie 2) (Partie 3) (Partie 4) (Partie 5) (Partie 6)
U4E00voir Chinois, japonais et coréen, Sinogramme, Chinois écrit, Langues chinoises, Écritures du japonais, Japonais, Hanja, Coréen, Vietnamien
A000A48FSyllabaire yi des Monts fraisUA000voir Syllabaire yi
A490A4CFClés yiUA490voir Syllabaire yi
A4D0A4FFLisuUA4D0voir Lisu, Alphabet Fraser (en)
A500A63FVaïUA500voir Syllabaire vaï
A640A69FCyrillique étendu BUA640voir Alphabet cyrillique
A6A0A6FFBamounUA6A0voir Écriture bamoun
A700A71FLettres modificatives de tonUA700voir Langue à tons, Langues chinoises
A720A7FFLatin étendu DUA720voir Alphabet Latin
A800A82FSylotî nâgrîUA800voir Sylotî nâgrî (en)
A830A83FFormes numériques communes indiennesUA830voir Inde
A840A87FPhags-paUA840voir Écriture phagpa
A880A8DFSaurachtraUA880voir Alphabet Saurashtra (en)
A8E0A8FFDevanāgarī étenduUA8E0voir Dévanâgarî
A900A92FKayah liUA900voir Alphabet Kayah Li
A930A95FRejangUA930voir Écriture rejang
A960A97FJamos hangûl étendu AUA960voir Hangûl, Sinogramme, Coréen
A980A9DFJavanaisUA980voir Écriture javanaise
A9E0A9FFBirman étendu BUA9E0voir Birman, Écriture birmane
AA00AA5FChamUAA00voir Cham
AA60AA7FBirman étendu AUAA60voir Birman, Écriture birmane
AA80AADFTaï viêtUAA80voir Alphabet taï viêt, Tay dam, Tay don, Tay Song (en)
AAE0AAFFMeitei mayek étenduUAAE0voir Meitei, Écriture Meitei
AB00AB2FÉthiopien étendu AUAB00voir Alphasyllabaire guèze
AB30AB6FLatin étendu EUAB30voir Alphabet latin, Teuthonista, Alphabet d'Ascoli, Alphabet Rousselot-Gilliéron
AB70ABBFSupplément CherokeeUAB70voir Syllabaire cherokee
ABC0ABFFMeitei mayekUABC0voir Meitei, Écriture Meitei
AC00D7AFSyllabes hangûl
(Partie 1) (Partie 2) (Partie 3) (Partie 4)
UAC00voir Hangûl, Sinogramme, Coréen
D7B0D7FFJamos hangûl étendu BU27B0voir Hangûl, Sinogramme, Coréen
D800DBFFDemi-zone haute d’indirectionUD800voir Demi-zone haute d’indirection
DC00DFFFDemi-zone basse d’indirectionUDC00voir Demi-zone basse d’indirection
E000F8FFZone à usage privé
(Partie 1) (Partie 2)
UE000Aucun caractère officiellement défini
F900FAFFIdéogrammes de compatibilité CJCUF900voir Chinois, japonais et coréen, Sinogramme, Chinois écrit, Langues chinoises, Écritures du japonais, Japonais, Hanja, Coréen
FB00FB4FFormes de présentation alphabétiquesUFB00voir Alphabet latin, Alphabet hébreu, Alphabet arménien
FB50FDFFFormes A de présentation arabes
(Partie 1) (Partie 2) (Partie 3)
UFB50voir Alphabet arabe
FE00FE0FSélecteurs de varianteUFE00voir Sélecteurs de variante (en)
FE10FE1FFormes verticalesUFE10voir Ponctuation, GB 18030
FE20FE2FDemi-signes combinatoiresUFE20voir Diacritique
FE30FE4FFormes de compatibilité CJCUFE30voir Chinois, japonais et coréen, Sinogramme, Chinois écrit, Langues chinoises, Écritures du japonais, Japonais, Hanja, Coréen
FE50FE6FPetites variantes de formeUFE50voir Ponctuation, GBK, GB 2312, CNS 11643 (en)
FE70FEFFFormes B de présentation arabesUFE70voir Alphabet arabe
FF00FFEFFormes de demi et pleine chasseUFF00voir Formes à demi et pleine chasse, Chinois, japonais et coréen, Sinogramme, Chinois écrit, Langues chinoises, Écritures du japonais, Japonais, Hanja, Coréen, ASCII, Alphabet latin
FFF0FFFFCaractères spéciauxUFFF0voir Caractères spéciaux

Plan multilingue complémentaire (PMC, 10000 à 1FFFF)

Points de code Nom officiel du bloc PDF Officiel En savoir plus
Début Fin
100001007FSyllabaire linéaire BU10000voir Linéaire B
10080100FFIdéogrammes du linéaire BU10080voir Linéaire B
101001013FNombres égéensU10100voir Nombres égéens (en)
101401018FNombres grecs anciensU10140voir Nombres grecs anciens
10190101CFSymboles anciensU10190voir Unités de mesure romaines, Monnaie romaine
101D0101FFDisque de PhaïstosU101D0voir Disque de Phaistos
102001027FRéservé--
102801029FLycienU10280voir Lycien
102A0102DFCarienU102A0voir Alphabet carien
102E0102FFNombres épactes coptesU102E0voir Copte
103001032FAlphabet italiqueU10300voir Ancien alphabet italique
103301034FGotiqueU10330voir Gotique
103501037FAncien permienU10350voir Ancien alphabet permien
103801039FOugaritiqueU10380voir Alphabet ougaritique
103A0103FFVieux perseU103A0voir Vieux perse
104001044FDéséretU10400voir Alphabet deseret
104501047FShavienU10450voir Alphabet shavien
10480104AFOsmanyaU10480voir Alphabet Osmanya
104B0104FFOsageU104B0voir Osage
105001052FElbasanU10500voir Écriture Elbasan
105301056FAghbanienU10530voir Alphabet aghbanien
10570105FFRéservé--
106001077FLinéaire AU10600voir Linéaire A
10780107FFRéservé--
108001083FSyllabaire chyprioteU10800voir Syllabaire chypriote
108401085FAraméen impérialU10840voir Alphabet araméen
108601087FAlphabet palmyrénienU10860voir Alphabet palmyrénien
10880108AFNabatéenU10880voir Alphabet nabatéen
108B0108DFRéservé--
108E0108FFHatrénienU108E0voir Alphabet Hatrénien (en)
109001091FPhénicienU10900voir Alphabet phénicien
109201093FLydienU10920voir Alphabet lydien
109401097FRéservé--
109801099FHiéroglyphes méroïtiquesU10980voir Écriture méroïtique
109A0109FFCursif méroïtiqueU109A0voir Écriture méroïtique
10A0010A5FKharochthîU10A00voir Alphabet kharoshthi
10A6010A7FSud-arabiqueU10A60voir Alphabet sudarabique
10A8010A9FNord-arabiqueU10A80voir Ancien arabe du nord (en)
10AA010ABFRéservé--
10AC010AFFManichéenU10AC0voir Alphabet Manichéen (en)
10B0010B3FAvestiqueU10B00voir Alphabet Avestique (en)
10B4010B5FParthe des inscriptionsU10B40voir Parthe des inscriptions (en)
10B6010B7FPehlevi des inscriptionsU10B60voir Écriture pehlevi
10B8010BAFPehlevi des psautiersU10B80voir Écriture pehlevi, Psautier
10BB010BFFRéservé--
10C0010C4FOrkhonU10C00voir Alphabet de l'Orkhon
10C5010C7FRéservé--
10C8010CFFAncien hongroisU10C80voir Runes hongroises
10D0010E5FRéservé--
10E6010E7FSymboles numériques rumiU10E60voir Chiffres de Fès, Fès
10E8010FDFRéservé--
10FE010FFFÉlymaïqueU10FE0voir Élymaïque (en)
110001107FBrahmîU11000voir Brahmi
11080110CFKhaïthîU11080voir Khaithi
110D0110FFSora sompengU110D0voir Alphabet sora sompeng (en)
111001114FChakmaU11100voir Ojhapath
111501117FMahâjanîU11150voir Mahâjanî (en)
11180111DFCharadaU11180voir Alphasyllabaire sharda
111E0111FFNombres archaïques singhalaisU111E0voir Singhalais
112001124FKhojkiU11200voir Khojki (en)
112501127FRéservé--
11280112AFMultaniU11280voir Alphabet Multani (en)
112B0112FFKhudabadiU112B0voir Écriture Khudabadi (en)
113001137FGranthaU11300voir Grantha
11380113FFRéservé--
114001147FNewaU11400voir Alphabet Newa (en)
11480114DFTirhutaU11480voir Tirhuta
114E01157FRéservé--
11580115FFSiddhamU11580voir Alphasyllabaire siddham
116001165FModiU11600voir Alphasyllabaire modi
116601167FSupplément mongolU11660voir Mongol
11680116CFTakriU11680voir Alphabet Takri (en)
116D0116FFRéservé--
117001173FÂhomU11700voir Alphasyllabaire âhom
117401189FRéservé--
118A0118FFWarang citiU118A0voir Warang Citi (en)
1190011999Réservé--
119A0119FFnandinâgarîU119A0voir Nandinagari (en)
11A0011A4FZanabazar quadratiqueU11A00voir Zanabazar, Mongol
11A5011AAFSoyomboU11A50voir Écriture soyombo
11AB011ABFRéservé--
11AC011AFFPaou chin haouU11AC0voir Écriture Paou chin haou (en)
11B0011BFFRéservé--
11C0011C6FBhaiksukiU11C00voir Alphabet Bhaiksuki (en)
11C7011CBFMarchenU11C70voir Zhang-zhung
11CC011CFFRéservé--
11D0011D5FMasaram gondiU11D00voir Masaram Gondi (en), Gondi
11D6011FBFRéservé--
11FC011FFFSupplément tamoulU11FC0voir Tamoul
12000123FFCunéiformeU12000voir Cunéiforme
124001247FPonctuation et nombres cunéiformesU12400voir Cunéiforme
124801254FCunéiforme des dynasties archaïquesU12480voir Cunéiforme
1255012FFFRéservé--
130001342FHiéroglyphes égyptiensU13000voir Écriture hiéroglyphique égyptienne
134301343FContrôles de formattage de hiéroglyphes égyptiensU13430voir Écriture hiéroglyphique égyptienne
13440143FFRéservé
(Partie 1) (Partie 2)
--
144001467FHiéroglyphes anatoliensU14400voir Hiéroglyphes anatoliens
14680167FFRéservé
(Partie 1) (Partie 2) (Partie 3)
--
1680016A3FSupplément bamounU16800voir Écriture bamoun
16A4016A6FMroU16A40voir Langue Mro (en)
16A7016ACFRéservé--
16AD016AFFBassaU16AD0voir Alphabet bassa
16B0016B8FPahawh hmongU16B00voir Pahawh hmong
16B9016EFFRéservé--
16F0016F9FMiaoU16F00voir Écriture Miao (en)
16FA016FDFRéservé--
16FE016FFFSymboles et ponctuation idéographiquesU16FE0voir Idéogramme, Écriture tangoute, Nüshu
17000187FFTangoute
(Partie 1) (Partie 2)
U17000voir Écriture tangoute
1880018AFFComposants tangoutesU18800voir Écriture tangoute
18B001AFFFRéservé
(Partie 1) (Partie 2) (Partie 3)
--
1B0001B0FFSupplément kanaU1B00voir Japonais, Écritures du japonais, Kana
1B1001B12FKana étendu AU1B100voir Japonais, Écritures du japonais, Kana, Hentaigana
1B1301B16FExtension petit kanaU1B130voir Japonais, Écritures du japonais, Kana, Hentaigana
1B1701B2FFNüshuU1B170voir Nüshu
1B3001BBFFRéservé--
1BC001BC9FSténographie DuployéU1BC00voir Sténographie, Émile Duployé
1BCA01CFFFRéservé
(Partie 1) (Partie 2)
--
1D0001D0FFSymboles musicaux byzantinsU1D000voir Musique byzantine
1D1001D1FFSymboles musicaux occidentauxU1D100voir Musique occidentale
1D2001D24FNotation musicale grecque ancienneU1D200voir Musique grecque ancienne
1D2501D2FFRéservé--
1D3001D35FSymboles du Classique du mystère suprêmeU1D300voir Tai Xuan Jing (en)
1D3601D37FChiffres-bâtonnets chinoisU1D360voir Numération à bâtons
1D3801D3FFRéservé--
1D4001D7FFSymboles mathématiques alphanumériquesU1D400voir Symbole mathématique, Alphabet latin, Chiffres arabes
1D8001DAAFÉcriture des signes de SuttonU1D800voir Écriture des signes
1DAB01DFFFRéservé--
1E0001E02FSupplément glagolitiqueU1E000voir Alphabet glagolitique
1E0301E0FFRéservé--
1E1001E14FNyiakeng puachue hmongU1E800voir Nyiakeng puachue hmong (en)
1E1501E2DFRéservé--
1E2C01E2FFWanchoU1E2C0voir Wancho
1E3001E7FFRéservé--
1E8001E8DFKikakui mendéU1E800voir Kikakui
1E8E01E8FFRéservé--
1E9001E95FAdlamU1E900voir Alphabet adlam
1E9601ECFFRéservé--
1ED001ED4FChiffres syaqU1ED00
1ED501ECFFRéservé--
1EE001EEFFSymboles de l'alphabet mathématique arabeU1EE00voir Mathématiques arabes
1EF001EFFFRéservé--
1F0001F02FPièces de mah-jongU1F000voir Mah-jong
1F0301F09FDominosU1F030voir Dominos
1F0A01F0FFCartes à jouerU1F0A0voir Cartes à jouer
1F1001F1FFSupplément alphanumérique cercléU1F100voir ARIB STD-B24 (en)
1F2001F2FFSupplément idéographique cercléU1F200voir ARIB STD-B24 (en)
1F3001F5FFDivers symboles et pictogrammesU1F300voir Pictogramme, Emoji
1F6001F64FÉmoticônesU1F600voir Émoticône, Emoji
1F6501F67FCasseau ornementalU1F650voir Wingdings
1F6801F6FFSymboles du transport et cartographiquesU1F680voir Transport, Cartographie, Emoji
1F7001F77FSymboles alchimiquesU1F700voir Alchimie
1F7801F7FFFormes géométriques étenduU1F780voir Forme géométrique
1F8001F8FFSupplément C de flèchesU1F800voir Flèche
1F9001F9FFSupplément de symboles et pictogrammesU1F900voir Pictogramme, Émoticône, Emoji
1FA001FA6FRéservé--
1FA701FAFFSymboles et pictogrammes étendu-AU1FA70voir Pictogramme, Emoji
1FB001FFFFRéservé--

Plan idéographique complémentaire (PIC, 20000 à 2FFFF)

Points de code Nom officiel du bloc En savoir plus
Début Fin
200002A6DFSupplément B aux idéogrammes unifiés CJC
(Partie 1) (Partie 2) (Partie 3) (Partie 4) (Partie 5) (Partie 6)
(Partie 7) (Partie 8) (Partie 9) (Partie 10) (Partie 11)
voir Chinois, japonais et coréen
2A6E02A6FFRéservé-
2A7002B73FSupplément C aux idéogrammes unifiés CJC
(Partie 1) (Partie 2)
voir Chinois, japonais et coréen
2B7402B81FSupplément D aux idéogrammes unifiés CJCvoir Chinois, japonais et coréen
2B8202CEAFSupplément E aux idéogrammes unifiés CJC[16]voir Chinois, japonais et coréen
2CEB02EBEFSupplément F aux idéogrammes unifiés CJC[17]voir Chinois, japonais et coréen
2EBF02F7FFRéservé[18]-
2F8002FA1FSupplément aux idéogrammes de compatibilité CJCvoir Chinois, japonais et coréen
2FA202FFFFRéservé-

Plans complémentaires réservés (30000 à DFFFF)

Points de code Nom officiel du bloc En savoir plus
Début Fin
300003FFFFRéservé[19]
(Partie 1) (Partie 2) (Partie 3) (Partie 4) (Partie 5)
(Partie 6) (Partie 7) (Partie 8) (Partie 9) (Partie 10)
(Partie 11) (Partie 12) (Partie 13) (Partie 14)
(Partie 15) (Partie 16) (Partie 17)
Plan 3
400004FFFFRéservé[20]
(Partie 1) (Partie 2) (Partie 3) (Partie 4) (Partie 5)
(Partie 6) (Partie 7) (Partie 8) (Partie 9) (Partie 10)
(Partie 11) (Partie 12) (Partie 13) (Partie 14)
(Partie 15) (Partie 16) (Partie 17)
Plan 4
500005FFFFRéservé[21]
(Partie 1) (Partie 2) (Partie 3) (Partie 4) (Partie 5)
(Partie 6) (Partie 7) (Partie 8) (Partie 9) (Partie 10)
(Partie 11) (Partie 12) (Partie 13) (Partie 14)
(Partie 15) (Partie 16) (Partie 17)
Plan 5
600006FFFFRéservé[22]
(Partie 1) (Partie 2) (Partie 3) (Partie 4) (Partie 5)
(Partie 6) (Partie 7) (Partie 8) (Partie 9) (Partie 10)
(Partie 11) (Partie 12) (Partie 13) (Partie 14)
(Partie 15) (Partie 16) (Partie 17)
Plan 6
700007FFFFRéservé[23]
(Partie 1) (Partie 2) (Partie 3) (Partie 4) (Partie 5)
(Partie 6) (Partie 7) (Partie 8) (Partie 9) (Partie 10)
(Partie 11) (Partie 12) (Partie 13) (Partie 14) (Partie 15) (Partie 16) (Partie 17)
Plan 7
800008FFFFRéservé[24]
(Partie 1) (Partie 2) (Partie 3) (Partie 4) (Partie 5)
(Partie 6) (Partie 7) (Partie 8) (Partie 9) (Partie 10)
(Partie 11) (Partie 12) (Partie 13) (Partie 14)
(Partie 15) (Partie 16) (Partie 17)
Plan 8
900009FFFFRéservé[25]
(Partie 1) (Partie 2) (Partie 3) (Partie 4) (Partie 5)
(Partie 6) (Partie 7) (Partie 8) (Partie 9) (Partie 10)
(Partie 11) (Partie 12) (Partie 13) (Partie 14)
(Partie 15) (Partie 16) (Partie 17)
Plan 9
A0000AFFFFRéservé[26]
(Partie 1) (Partie 2) (Partie 3) (Partie 4) (Partie 5)
(Partie 6) (Partie 7) (Partie 8) (Partie 9) (Partie 10)
(Partie 11) (Partie 12) (Partie 13) (Partie 14)
(Partie 15) (Partie 16) (Partie 17)
Plan 10
B0000BFFFFRéservé[27]
(Partie 1) (Partie 2) (Partie 3) (Partie 4) (Partie 5)
(Partie 6) (Partie 7) (Partie 8) (Partie 9) (Partie 10)
(Partie 11) (Partie 12) (Partie 13) (Partie 14)
(Partie 15) (Partie 16) (Partie 17)
Plan 11
C0000CFFFFRéservé[28]
(Partie 1) (Partie 2) (Partie 3) (Partie 4) (Partie 5)
(Partie 6) (Partie 7) (Partie 8) (Partie 9) (Partie 10)
(Partie 11) (Partie 12) (Partie 13) (Partie 14)
(Partie 15) (Partie 16) (Partie 17)
Plan 12
D0000DFFFFRéservé[29]
(Partie 1) (Partie 2) (Partie 3) (Partie 4) (Partie 5)
(Partie 6) (Partie 7) (Partie 8) (Partie 9) (Partie 10)
(Partie 11) (Partie 12) (Partie 13) (Partie 14)
(Partie 15) (Partie 16) (Partie 17)
Plan 13

Plan complémentaire spécialisé (PCS, E0000 à EFFFF)

Points de code Nom officiel du bloc Commentaires
Début Fin
E0000E007FÉtiquettes
E0080E00FFRéservé[30]-
E0100E01EFSupplément de sélecteurs de variante
E01F0EFFFFRéservé[31]
(Partie 1) (Partie 2) (Partie 3) (Partie 4) (Partie 5)
(Partie 6) (Partie 7) (Partie 8) (Partie 9) (Partie 10)
(Partie 11) (Partie 12) (Partie 13) (Partie 14)
(Partie 15) (Partie 16) (Partie 17)
-

Plans complémentaires à usage privé (F0000 à 10FFFF)

Points de code Nom officiel du bloc PDF officiel Commentaires
Début Fin
F0000FFFFFZone supplémentaire A à usage privé
(Partie 1) (Partie 2) (Partie 3) (Partie 4) (Partie 5)
(Partie 6) (Partie 7) (Partie 8) (Partie 9) (Partie 10)
(Partie 11) (Partie 12) (Partie 13) (Partie 14)
(Partie 15) (Partie 16) (Partie 17)
UF0000Aucun caractère officiellement défini
10000010FFFFZone supplémentaire B à usage privé
(Partie 1) (Partie 2) (Partie 3) (Partie 4) (Partie 5)
(Partie 6) (Partie 7) (Partie 8) (Partie 9) (Partie 10)
(Partie 11) (Partie 12) (Partie 13) (Partie 14)
(Partie 15) (Partie 16) (Partie 17)
U100000Aucun caractère officiellement défini

Les zones à usage privé ne contiennent pas les mêmes œils d'une police à l'autre et doivent donc être évités pour le codage de textes destinés aux échanges entre systèmes hétérogènes. Toutefois, ces points de codes à usage privé sont valides et peuvent être utilisés dans tout traitement automatisé conforme aux normes Unicode et ISO/CEI 10646, y compris entre systèmes différents s'il existe un accord mutuel privé concernant leur usage.

En l'absence d'accord entre les deux parties, des systèmes utilisant ces caractères peuvent rejeter les textes les contenant, car les traitements qu'ils leur font subir pourraient ne pas fonctionner correctement ou causer des problèmes de sécurité ; les autres systèmes qui n'attribuent aucune fonction spéciale à ces caractères doivent en revanche les accepter comme valides et les conserver comme partie intégrante des textes, comme s'il s'agissait de symboles graphiques, même s'ils ne savent pas les afficher correctement.

Les non-caractères sont des points de code valides, mais ils ne sont pas (et ne seront jamais) assignés à des caractères standardisés. Leur usage dans le codage de textes transmis entre systèmes (même si identiques) est interdit, car il est impossible de les rendre compatibles avec les formes de transformation universelles standardisées (dont UTF-8, UTF-16, UTF-32) les schémas de codage correspondants, et les autres codages standardisés compatibles avec Unicode et ISO/CEI 10646 (BOCU-1, SCSU, différentes versions de la norme chinoise GB 18030, etc.). Toutefois, certains systèmes les génèrent et les utilisent localement, mais pour un traitement strictement interne destiné à faciliter l'implémentation des algorithmes de traitement de textes utilisant les autres caractères standardisés.

Parmi ces derniers non-caractères figurent les points de code valides mais réservés aux demi-zones (privées ou non). Ces points de code ne peuvent pas être utilisés individuellement pour coder un caractère. Ils servent uniquement pour la forme de transformation universelle UTF-16 (et les schémas de codage correspondants) pour représenter sur deux codets (à 16 bits chacun) des points de code valides dans un des 16 plans complémentaires (certaines combinaisons de codets correspondent à des caractères valides de ces plans, standards ou privés, d'autres combinaisons peuvent ne représenter aucun caractère valide car elles correspondraient à des non-caractères de ces plans complémentaires, et sont donc interdites dans les textes conformes à la norme).

Les autres zones libres (non assignées à un bloc nommé standardisé, ou les points de code laissés libres et réservés dans les blocs nommés existants) sont réservés pour un usage ultérieur dans des versions futures d'Unicode et ISO/CEI 10646, mais sont valides. Tout système traitant des textes contenant ces points de code réservés doivent les accepter sans les filtrer. Unicode définit des propriétés par défaut pour les hypothétiques caractères correspondants, afin de préserver la compatibilité des systèmes (conformes à la norme Unicode) avec les futurs textes conformes qui les contiendraient. Aucune application conforme ne doit leur assigner un caractère ou une sémantique spéciale (les zones privées sont destinées à cet usage).

Notes et références

  1. (en) « Announcing The Unicode® Standard, Version 12.0 », sur The Unicode Blog,
  2. (en) .
  3. (en) « Usage Statistics of Character Encodings for Websites, January 2017 », sur w3techs.com (consulté le ).
  4. « Unicode 7.0 ajoute 250 emojis dont le doigt d'honneur », sur nextinpact.com, (consulté le ).
  5. (en) « Unicode 8: What, And When », sur emojipedia.org, (consulté le ).
  6. (en) « Unicode® 9.0.0 », sur http://unicode.org/ (consulté le ).
  7. (en) « Unicode® 10.0.0 », sur http://unicode.org/ (consulté le ).
  8. (en) « Unicode® 11.0.0 », sur http://unicode.org/ (consulté le ).
  9. (en) « Unicode® 12.0.0 », sur http://unicode.org/ (consulté le ).
  10. Inc Unicode, « Announcing The Unicode® Standard, Version 13.0 » (consulté le )
  11. (en) Unicode Technical Report #17: Unicode Character Encoding Model.
  12. (en) « UTF-8, a transformation format of ISO 10646 », Request for comments no 3629, .
  13. (en) The Unicode Standard, Version 5.0, Chapter 16 : Special Areas and Format Characters[PDF] - Unicode, Inc., p. 354.
  14. Les séquences UTF-8 doivent être les plus courtes possibles. Cette restriction doit être vérifiée pour éviter certaines failles de sécurité, du type « /../ » – se reporter aux détails dans la section « Inconvénients » de l'article UTF-8.
  15. (en) « Code in Apache Xalan 2.7.0 which can fail on surrogate pairs », Apache Foundation.
  16. http://unicode.org/charts/PDF/U2B820.pdf
  17. http://unicode.org/charts/PDF/U2CEB0.pdf
  18. http://unicode.org/charts/PDF/U2EBF0.pdf
  19. http://unicode.org/charts/PDF/U30000.pdf
  20. http://unicode.org/charts/PDF/U40000.pdf
  21. http://unicode.org/charts/PDF/U50000.pdf
  22. http://unicode.org/charts/PDF/U60000.pdf
  23. http://unicode.org/charts/PDF/U70000.pdf
  24. http://unicode.org/charts/PDF/U80000.pdf
  25. http://unicode.org/charts/PDF/U90000.pdf
  26. http://unicode.org/charts/PDF/UA0000.pdf
  27. http://unicode.org/charts/PDF/UB0000.pdf
  28. http://unicode.org/charts/PDF/UC0000.pdf
  29. http://unicode.org/charts/PDF/UD0000.pdf
  30. http://unicode.org/charts/PDF/UE0080.pdf
  31. http://unicode.org/charts/PDF/UE01F0.pdf

Voir aussi

Articles connexes

Références normatives

Références informatives

Tables et données

  • (en) The Gallery of Unicode Fonts : inventaire de 1 239 fontes () et des caractères qu'elles comprennent.
  • (en) Unicode and Multilingual Support in HTML, Fonts, Web Browsers and Other Applications, le site d'Alan Wood recensant les différents blocs d'Unicode avec pages de tests, conseils et liens vers les ressources, polices, et utilitaires permettant de saisir et d'afficher les blocs en question avec les navigateurs Web ou dans d'autres logiciels.
  • (en) (de) Decode Unicode, Wiki recensant et commentant tous les 98 884 caractères d'Unicode en images.
  • (fr) CoeurLumiere.com, simple table des caractères Unicode de U+0000 à U+FFFF (attention, certains sont invalides en HTML et ne sont pas signalés).

Guides d'utilisation

Discussions et articles

  • (fr) Unicode, écriture du monde ? (vol. 6 (2003) de la revue Document numérique, 364 pages). Intérêt : points de vue critiques (typographes, informaticiens, égyptologues, etc.) et entretien avec Ken Whistler, directeur technique du Consortium Unicode.
  • (en) Otfried Cheong, UniHan (article sur les problèmes d'unification des sinogrammes avec UniHan dans Unicode)
  • Portail de l’informatique
  • Portail de l’écriture
  • Portail du Web sémantique
Cet article est issu de Wikipedia. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.