Unicode

Un article de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 16 août 2021 à 23:34 et modifiée en dernier par 78.116.137.195 (discuter). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.
Logo 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é.

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 NFDetc. 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.

Version Date de publication Nouveaux 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.0 2 834 nouveaux caractères dont les emojis[4].
8.0 7 716 caractères dont de nombreux emojis[5].
9.0 7 500 nouveaux caractères (dont 72 emojis)[6].
10.0 8 518 nouveaux caractères (dont 56 emojis)[7].
11.0 684 nouveaux caractères (dont 66 emojis)[8].
12.0 554 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 7 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 10000 10001 103FF
D801 10400 10401 107FF
  ⋮
DBFF 10FC00 10FC01 10FFFF

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][a] ou wchar_t[2][b] char[] ou wchar_t[]
C++ char[4][a] ou wchar_t[2][a] char[] ou wchar_t[] ou std::string ou std::wstring
Java char[2] ou int[c] char[] ou String
Bibliothèque ICU (pour C/C++ ou Java) UChar UChar[] ou String, UnicodeString
JavaScript ou ECMAScript char[d] string
C# ou J# char string
Delphi char[4][a] ou widechar[2] string[a] ou widestring
Python 2 unicode
Python 3 str
Go rune (=int32) string ou []byte
Swift Character String

Notes

  1. a b c d et e 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
0000 007F Commandes C0 et latin de base U0000 voir ISO/CEI 646, ASCII, Alphabet latin, Caractères de contrôle Unicode
0080 00FF Commandes C1 et supplément Latin-1 U0080 voir ISO/CEI 8859, ISO/CEI 8859-1, Alphabet latin, Caractères de contrôle Unicode
0100 017F Latin étendu A U0100 voir Alphabet latin
0180 024F Latin étendu B U0180 voir Alphabet latin
0250 02AF Alphabet phonétique international (API) U0250 voir Alphabet phonétique international
02B0 02FF Lettres modificatives avec chasse U02B0 voir Diacritique, Alphabet latin, Diacritiques de l'alphabet latin, Alphabet phonétique international
0300 036F Diacritiques U0300 voir Diacritique, Diacritiques de l'alphabet latin, Diacritiques de l'alphabet grec, Alphabet copte, Diacritiques de l'alphabet cyrillique
0370 03FF Grec et copte U0370 voir Alphabet grec et Alphabet copte
0400 04FF Cyrillique U0400 voir Alphabet cyrillique
0500 052F Supplément cyrillique U0500 voir Alphabet cyrillique
0530 058F Arménien U0530 voir Alphabet arménien
0590 05FF Hébreu U0590 voir Alphabet hébreu, Diacritique, Diacritiques de l'alphabet hébreu
0600 06FF Arabe U0600 voir Alphabet arabe
0700 074F Syriaque U0700 voir Syriaque
0750 077F Supplément Arabe U0750 voir Alphabet arabe
0780 07BF Thâna U0780 voir Alphabet Maldivien
07C0 07FF N’ko U07C0 voir N'ko
0800 083F Samaritain U0800 voir Alphabet samaritain
0840 085F Mandéen U0840 voir Alphabet mandéen
0860 086F Supplément Syriaque U0860 voir Syriaque
0870 089F Réservé - -
08A0 08FF Arabe étendu A U08A0 voir Alphabet arabe, Diacritique, Diacritiques de l'alphabet arabe
0900 097F Dévanâgarî U0900 voir Dévanâgarî
0980 09FF Bengali U0980 voir Bengalî
0A00 0A7F Gourmoukhî U0A00 voir Gurmukhī
0A80 0AFF Goudjerate U0A80 voir Alphabet gujarâtî
0B00 0B7F Oriya U0B00 voir Oriya
0B80 0BFF Tamoul U0B80 voir Tamoul
0C00 0C7F Télougou U0C00 voir Télougou
0C80 0CFF Kannara U0C80 voir Kannara
0D00 0D7F Malayalam U0D00 voir Malayalam
0D80 0DFF Singhalais U0D80 voir Singhalais
0E00 0E7F Thai U0E00 voir Thaï
0E80 0EFF Lao U0E80 voir Lao
0F00 0FFF Tibétain U0F00 voir Tibétain
1000 109F Birman U1000 voir Birman
10A0 10FF Géorgien U10A0 voir Géorgien, Alphabet géorgien
1100 11FF Jamos hangûl U1100 voir Hangûl
1200 137F Éthiopien U1200 voir Alphasyllabaire guèze
1380 139F Supplément éthiopien U1380 voir Alphasyllabaire guèze
13A0 13FF Cherokee U13B0 voir Syllabaire cherokee
1400 167F Syllabaires autochtones canadiens unifiés U1400 voir Langues amérindiennes
1680 169F Ogam U1680 voir Alphabet oghamique
16A0 16FF Runes U16A0 voir Alphabet runique
1700 171F Tagalog U1700 voir Tagalog
1720 173F Hanounóo U1720 voir Alphabet Hanunóo (en)
1740 175F Bouhide U1740 voir Bouhide (en)
1760 177F Tagbanoua U1760 voir Alphabet Tagbanoua (en)
1780 17FF Khmer U1780 voir Khmer
1800 18AF Mongol U1800 voir Mongol
18B0 18FF Syllabaires autochtones canadiens étendus U18B0 voir Langues amérindiennes
1900 194F Limbou U1900 voir Limbou
1950 197F Taï-le U1950 voir Taï-le
1980 19DF Nouveau Taï lü U1980 voir Tai lü
19E0 19FF Symboles khmers U19E0 voir Khmer
1A00 1A1F Bougui U1A00 voir Bouguinais, Écriture lontara
1A20 1AAF Taï tham U1A20 voir Alphabet Taï Tham (en)
1AB0 1AFF Diacritiques étendu U1AB0 voir Diacritique
1B00 1B7F Balinais U1B00 voir Écriture balinaise
1B80 1BBF Soundanais U1B80 voir Soundanais, Alphabet Soudanais (en)
1BC0 1BFF Batak U1BC0 voir Écriture batak
1C00 1C4F Lepcha U1C00 voir Alphabet Lepch (en)
1C50 1C7F Ol chiki U1C50 voir Alphabet santâlî
1C80 1C8F Cyrillique étendu C U1C80 voir Alphabet cyrillique, Slavon d'église
1C90 1CBF Géorgien étendu U1C90 voir Géorgien, Alphabet géorgien
1CC0 1CCF Supplément soundanais U1CC0 voir Soundanais, Alphabet Soudanais (en)
1CD0 1CFF Extensions védiques U1CD0 voir Sanskrit
1D00 1D7F Supplément phonétique U1D00 voir Alphabet phonétique international
1D80 1DBF Supplément phonétique étendu U1D80 voir Alphabet phonétique international
1DC0 1DFF Supplément de diacritiques U1DC0 voir Diacritique
1E00 1EFF Latin étendu additionnel U1E00 voir Alphabet latin
1F00 1FFF Grec étendu U1F00 voir Alphabet grec, Grec polytonique
2000 206F Ponctuation générale U2000 voir Ponctuation, Espace
2070 209F Exposants et indices U2070 voir Exposant et Indice
20A0 20CF Symboles monétaires U20A0 voir Symbole monétaire
20D0 20FF Signes combinatoires pour symboles U20D0 voir Flèche, rotation
2100 214F Symboles de type lettre U2100 voir Température, Symbole mathématique, Symboles du droit des marques
2150 218F Formes numérales U2150 voir Numération romaine, Fraction
2190 21FF Flèches U2190 voir Flèche
2200 22FF Opérateurs mathématiques U2200 voir Opérateurs mathématiques
2300 23FF Signes techniques divers U2300 voir Alphabet grec, Ponctuation, Flèche, Symboles Mathématiques, Emoji
2400 243F Pictogrammes de commande U2400 voir ISO/CEI 8859, ISO/CEI 646, Contrôle C0 (en)
2440 245F Reconnaissance optique de caractères U2430 voir Reconnaissance optique de caractères
2460 24FF Alphanumériques cerclés U2460 voir Alphabet latin, Chiffres arabes
2500 257F Filets U2500 voir Caractère de dessin de forme (en)
2580 259F Pavés U2580 voir Caractère de dessin de forme (en), Rectangle
25A0 25FF Formes géométriques U25A0 voir Forme géométrique
2600 26FF Symboles divers U2600 voir Symbole, Emoji, Jeu de cartes français, Échecs, Symbole de genre
2700 27BF Casseau U2700 voir Symbole, Chiffres arabe, Ponctuation, Emoji, Opérateurs mathématiques, Flèche
27C0 27EF Symboles mathématiques divers A U27C0 voir Symbole mathématique
27F0 27FF Supplément A de flèches U27F0 voir Flèche
2800 28FF Combinaisons Braille U2800 voir Braille
2900 297F Supplément B de flèches U2900 voir Flèche
2980 29FF Symboles mathématiques divers B U2980 voir Symbole mathématique
2A00 2AFF Opérateurs mathématiques supplémentaires U2A00 voir Opérateurs mathématiques
2B00 2BFF Divers symboles et flèches U2B00 voir Flèche, Emoji
2C00 2C5F Glagotique U2C00 voir Alphabet glagolitique
2C60 2C7F Latin étendu C U2C00 voir Alphabet Latin, Ouïghour
2C80 2CFF Copte U2C80 voir Alphabet copte
2D00 2D2F Supplément géorgien U2D00 voir Géorgien, Alphabet géorgien
2D30 2D7F Tifinagh U2D30 voir Tifinagh et Langues berbères
2D80 2DDF Éthiopien étendu U2D80 voir Alphasyllabaire guèze
2DE0 2DFF Cyrillique étendu A U2DE0 voir Alphabet cyrillique, Diacritique, Diacritiques de l'alphabet cyrillique
2E00 2E7F Supplément de ponctuation U2E00 voir Ponctuation
2E80 2EFF Formes supplémentaires des clés CJC U2E80 voir Chinois, japonais et coréen, Sinogramme, Chinois écrit, Langues chinoises, Écritures du japonais, Japonais, Hanja, Coréen
2F00 2FDF Clés chinoises Kangxi U2F00 voir Dictionnaire de caractères de Kangxi
2FE0 2FEF Réservé - -
2FF0 2FFF Description idéographique U2FF0 voir Description idéographique
3000 303F Symboles et ponctuation CJC U3000 voir Ponctuation, Chinois, japonais et coréen, Sinogramme, Chinois écrit, Langues chinoises, Écritures du japonais, Japonais, Hanja, Coréen
3040 309F Hiragana U3040 voir Hiragana, Écritures du japonais, Japonais
30A0 30FF Katakana U30A0 voir Katakana, Écritures du japonais, Japonais
3100 312F Bopomofo U3100 voir Bopomofo, Chinois, japonais et coréen, Sinogramme
3130 318F Jamos de compatibilité hangûl U3130 voir Hangûl, Sinogramme, Coréen
3190 319F Kanbun U3190 voir Kanbun, Sinogramme
31A0 31BF Bopomofo étendu U31A0 voir Bopomofo, Sinogramme
31C0 31EF Traits CJC U31C0 voir Chinois, japonais et coréen, Sinogramme, Chinois écrit, Langues chinoises, Écritures du japonais, Japonais, Hanja, Coréen
31F0 31FF Extension phonétique katakana U31F0 voir Katakana, Écritures du japonais, Japonais
3200 32FF Lettres et mois CJC cerclés U3200 voir Chiffres arabes,Chinois, japonais et coréen, Sinogramme, Chinois écrit, Langues chinoises, Écritures du japonais, Japonais, Hanja, Coréen
3300 33FF Compatibilité CJC U3000 voir Unité de mesure, Chinois, japonais et coréen, Sinogramme, Chinois écrit, Langues chinoises, Écritures du japonais, Japonais, Hanja, Coréen
3400 4DBF Supplément A aux Idéogrammes unifiés CJC
(Partie 1) (Partie 2)
U3400 voir Chinois, japonais et coréen, Sinogramme, Chinois écrit, Langues chinoises, Écritures du japonais, Japonais, Hanja, Coréen
4DC0 4DFF Hexagrammes du Classique des mutations ou Yi Jing U4DC0 voir Yi Jing, Hexagramme, Chinois, japonais et coréen, Sinogramme
4E00 9FFF Idéogrammes unifiés CJC
(Partie 1) (Partie 2) (Partie 3) (Partie 4) (Partie 5) (Partie 6)
U4E00 voir Chinois, japonais et coréen, Sinogramme, Chinois écrit, Langues chinoises, Écritures du japonais, Japonais, Hanja, Coréen, Vietnamien
A000 A48F Syllabaire yi des Monts frais UA000 voir Syllabaire yi
A490 A4CF Clés yi UA490 voir Syllabaire yi
A4D0 A4FF Lisu UA4D0 voir Lisu, Alphabet Fraser (en)
A500 A63F Vaï UA500 voir Syllabaire vaï
A640 A69F Cyrillique étendu B UA640 voir Alphabet cyrillique
A6A0 A6FF Bamoun UA6A0 voir Écriture bamoun
A700 A71F Lettres modificatives de ton UA700 voir Langue à tons, Langues chinoises
A720 A7FF Latin étendu D UA720 voir Alphabet Latin
A800 A82F Sylotî nâgrî UA800 voir Sylotî nâgrî (en)
A830 A83F Formes numériques communes indiennes UA830 voir Inde
A840 A87F Phags-pa UA840 voir Écriture phagpa
A880 A8DF Saurachtra UA880 voir Alphabet Saurashtra (en)
A8E0 A8FF Devanāgarī étendu UA8E0 voir Dévanâgarî
A900 A92F Kayah li UA900 voir Alphabet Kayah Li
A930 A95F Rejang UA930 voir Écriture rejang
A960 A97F Jamos hangûl étendu A UA960 voir Hangûl, Sinogramme, Coréen
A980 A9DF Javanais UA980 voir Écriture javanaise
A9E0 A9FF Birman étendu B UA9E0 voir Birman, Écriture birmane
AA00 AA5F Cham UAA00 voir Cham
AA60 AA7F Birman étendu A UAA60 voir Birman, Écriture birmane
AA80 AADF Taï viêt UAA80 voir Alphabet taï viêt, Tay dam, Tay don, Tay Song (en)
AAE0 AAFF Meitei mayek étendu UAAE0 voir Meitei, Écriture Meitei
AB00 AB2F Éthiopien étendu A UAB00 voir Alphasyllabaire guèze
AB30 AB6F Latin étendu E UAB30 voir Alphabet latin, Teuthonista, Alphabet d'Ascoli, Alphabet Rousselot-Gilliéron
AB70 ABBF Supplément Cherokee UAB70 voir Syllabaire cherokee
ABC0 ABFF Meitei mayek UABC0 voir Meitei, Écriture Meitei
AC00 D7AF Syllabes hangûl
(Partie 1) (Partie 2) (Partie 3) (Partie 4)
UAC00 voir Hangûl, Sinogramme, Coréen
D7B0 D7FF Jamos hangûl étendu B U27B0 voir Hangûl, Sinogramme, Coréen
D800 DBFF Demi-zone haute d’indirection UD800 voir Demi-zone haute d’indirection
DC00 DFFF Demi-zone basse d’indirection UDC00 voir Demi-zone basse d’indirection
E000 F8FF Zone à usage privé
(Partie 1) (Partie 2)
UE000 Aucun caractère officiellement défini
F900 FAFF Idéogrammes de compatibilité CJC UF900 voir Chinois, japonais et coréen, Sinogramme, Chinois écrit, Langues chinoises, Écritures du japonais, Japonais, Hanja, Coréen
FB00 FB4F Formes de présentation alphabétiques UFB00 voir Alphabet latin, Alphabet hébreu, Alphabet arménien
FB50 FDFF Formes A de présentation arabes
(Partie 1) (Partie 2) (Partie 3)
UFB50 voir Alphabet arabe
FE00 FE0F Sélecteurs de variante UFE00 voir Sélecteurs de variante (en)
FE10 FE1F Formes verticales UFE10 voir Ponctuation, GB 18030
FE20 FE2F Demi-signes combinatoires UFE20 voir Diacritique
FE30 FE4F Formes de compatibilité CJC UFE30 voir Chinois, japonais et coréen, Sinogramme, Chinois écrit, Langues chinoises, Écritures du japonais, Japonais, Hanja, Coréen
FE50 FE6F Petites variantes de forme UFE50 voir Ponctuation, GBK, GB 2312, CNS 11643 (en)
FE70 FEFF Formes B de présentation arabes UFE70 voir Alphabet arabe
FF00 FFEF Formes de demi et pleine chasse UFF00 voir 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
FFF0 FFFF Caractères spéciaux UFFF0 voir 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
10000 1007F Syllabaire linéaire B U10000 voir Linéaire B
10080 100FF Idéogrammes du linéaire B U10080 voir Linéaire B
10100 1013F Nombres égéens U10100 voir Nombres égéens (en)
10140 1018F Nombres grecs anciens U10140 voir Nombres grecs anciens
10190 101CF Symboles anciens U10190 voir Unités de mesure romaines, Monnaie romaine
101D0 101FF Disque de Phaïstos U101D0 voir Disque de Phaistos
10200 1027F Réservé - -
10280 1029F Lycien U10280 voir Lycien
102A0 102DF Carien U102A0 voir Alphabet carien
102E0 102FF Nombres épactes coptes U102E0 voir Copte
10300 1032F Alphabet italique U10300 voir Ancien alphabet italique
10330 1034F Gotique U10330 voir Gotique
10350 1037F Ancien permien U10350 voir Ancien alphabet permien
10380 1039F Ougaritique U10380 voir Alphabet ougaritique
103A0 103FF Vieux perse U103A0 voir Vieux perse
10400 1044F Déséret U10400 voir Alphabet deseret
10450 1047F Shavien U10450 voir Alphabet shavien
10480 104AF Osmanya U10480 voir Alphabet Osmanya
104B0 104FF Osage U104B0 voir Osage
10500 1052F Elbasan U10500 voir Écriture Elbasan
10530 1056F Aghbanien U10530 voir Alphabet aghbanien
10570 105FF Réservé - -
10600 1077F Linéaire A U10600 voir Linéaire A
10780 107FF Réservé - -
10800 1083F Syllabaire chypriote U10800 voir Syllabaire chypriote
10840 1085F Araméen impérial U10840 voir Alphabet araméen
10860 1087F Alphabet palmyrénien U10860 voir Alphabet palmyrénien
10880 108AF Nabatéen U10880 voir Alphabet nabatéen
108B0 108DF Réservé - -
108E0 108FF Hatrénien U108E0 voir Alphabet Hatrénien (en)
10900 1091F Phénicien U10900 voir Alphabet phénicien
10920 1093F Lydien U10920 voir Alphabet lydien
10940 1097F Réservé - -
10980 1099F Hiéroglyphes méroïtiques U10980 voir Écriture méroïtique
109A0 109FF Cursif méroïtique U109A0 voir Écriture méroïtique
10A00 10A5F Kharochthî U10A00 voir Alphabet kharoshthi
10A60 10A7F Sud-arabique U10A60 voir Alphabet sudarabique
10A80 10A9F Nord-arabique U10A80 voir Ancien arabe du nord (en)
10AA0 10ABF Réservé - -
10AC0 10AFF Manichéen U10AC0 voir Alphabet Manichéen (en)
10B00 10B3F Avestique U10B00 voir Alphabet Avestique (en)
10B40 10B5F Parthe des inscriptions U10B40 voir Parthe des inscriptions (en)
10B60 10B7F Pehlevi des inscriptions U10B60 voir Écriture pehlevi
10B80 10BAF Pehlevi des psautiers U10B80 voir Écriture pehlevi, Psautier
10BB0 10BFF Réservé - -
10C00 10C4F Orkhon U10C00 voir Alphabet de l'Orkhon
10C50 10C7F Réservé - -
10C80 10CFF Ancien hongrois U10C80 voir Runes hongroises
10D00 10E5F Réservé - -
10E60 10E7F Symboles numériques rumi U10E60 voir Chiffres de Fès, Fès
10E80 10FDF Réservé - -
10FE0 10FFF Élymaïque U10FE0 voir Élymaïque (en)
11000 1107F Brahmî U11000 voir Brahmi
11080 110CF Khaïthî U11080 voir Khaithi
110D0 110FF Sora sompeng U110D0 voir Alphabet sora sompeng (en)
11100 1114F Chakma U11100 voir Ojhapath
11150 1117F Mahâjanî U11150 voir Mahâjanî (en)
11180 111DF Charada U11180 voir Alphasyllabaire sharda
111E0 111FF Nombres archaïques singhalais U111E0 voir Singhalais
11200 1124F Khojki U11200 voir Khojki (en)
11250 1127F Réservé - -
11280 112AF Multani U11280 voir Alphabet Multani (en)
112B0 112FF Khudabadi U112B0 voir Écriture Khudabadi (en)
11300 1137F Grantha U11300 voir Grantha
11380 113FF Réservé - -
11400 1147F Newa U11400 voir Alphabet Newa (en)
11480 114DF Tirhuta U11480 voir Tirhuta
114E0 1157F Réservé - -
11580 115FF Siddham U11580 voir Alphasyllabaire siddham
11600 1165F Modi U11600 voir Alphasyllabaire modi
11660 1167F Supplément mongol U11660 voir Mongol
11680 116CF Takri U11680 voir Alphabet Takri (en)
116D0 116FF Réservé - -
11700 1173F Âhom U11700 voir Alphasyllabaire âhom
11740 1189F Réservé - -
118A0 118FF Warang citi U118A0 voir Warang Citi (en)
11900 11999 Réservé - -
119A0 119FF nandinâgarî U119A0 voir Nandinagari
11A00 11A4F Zanabazar quadratique U11A00 voir Zanabazar, Mongol
11A50 11AAF Soyombo U11A50 voir Écriture soyombo
11AB0 11ABF Réservé - -
11AC0 11AFF Paou chin haou U11AC0 voir Écriture Paou chin haou (en)
11B00 11BFF Réservé - -
11C00 11C6F Bhaiksuki U11C00 voir Alphabet Bhaiksuki (en)
11C70 11CBF Marchen U11C70 voir Zhang-zhung
11CC0 11CFF Réservé - -
11D00 11D5F Masaram gondi U11D00 voir Masaram Gondi (en), Gondi
11D60 11FBF Réservé - -
11FC0 11FFF Supplément tamoul U11FC0 voir Tamoul
12000 123FF Cunéiforme U12000 voir Cunéiforme
12400 1247F Ponctuation et nombres cunéiformes U12400 voir Cunéiforme
12480 1254F Cunéiforme des dynasties archaïques U12480 voir Cunéiforme
12550 12FFF Réservé - -
13000 1342F Hiéroglyphes égyptiens U13000 voir Écriture hiéroglyphique égyptienne
13430 1343F Contrôles de formattage de hiéroglyphes égyptiens U13430 voir Écriture hiéroglyphique égyptienne
13440 143FF Réservé
(Partie 1) (Partie 2)
- -
14400 1467F Hiéroglyphes anatoliens U14400 voir Hiéroglyphes anatoliens
14680 167FF Réservé
(Partie 1) (Partie 2) (Partie 3)
- -
16800 16A3F Supplément bamoun U16800 voir Écriture bamoun
16A40 16A6F Mro U16A40 voir Langue Mro (en)
16A70 16ACF Réservé - -
16AD0 16AFF Bassa U16AD0 voir Alphabet bassa
16B00 16B8F Pahawh hmong U16B00 voir Pahawh hmong
16B90 16EFF Réservé - -
16F00 16F9F Miao U16F00 voir Écriture Miao (en)
16FA0 16FDF Réservé - -
16FE0 16FFF Symboles et ponctuation idéographiques U16FE0 voir Idéogramme, Écriture tangoute, Nüshu
17000 187FF Tangoute
(Partie 1) (Partie 2)
U17000 voir Écriture tangoute
18800 18AFF Composants tangoutes U18800 voir Écriture tangoute
18B00 1AFFF Réservé
(Partie 1) (Partie 2) (Partie 3)
- -
1B000 1B0FF Supplément kana U1B00 voir Japonais, Écritures du japonais, Kana
1B100 1B12F Kana étendu A U1B100 voir Japonais, Écritures du japonais, Kana, Hentaigana
1B130 1B16F Extension petit kana U1B130 voir Japonais, Écritures du japonais, Kana, Hentaigana
1B170 1B2FF Nüshu U1B170 voir Nüshu
1B300 1BBFF Réservé - -
1BC00 1BC9F Sténographie Duployé U1BC00 voir Sténographie, Émile Duployé
1BCA0 1CFFF Réservé
(Partie 1) (Partie 2)
- -
1D000 1D0FF Symboles musicaux byzantins U1D000 voir Musique byzantine
1D100 1D1FF Symboles musicaux occidentaux U1D100 voir Musique occidentale
1D200 1D24F Notation musicale grecque ancienne U1D200 voir Musique grecque ancienne
1D250 1D2FF Réservé - -
1D300 1D35F Symboles du Classique du mystère suprême U1D300 voir Tai Xuan Jing (en)
1D360 1D37F Chiffres-bâtonnets chinois U1D360 voir Numération à bâtons
1D380 1D3FF Réservé - -
1D400 1D7FF Symboles mathématiques alphanumériques U1D400 voir Symbole mathématique, Alphabet latin, Chiffres arabes
1D800 1DAAF Écriture des signes de Sutton U1D800 voir Écriture des signes
1DAB0 1DFFF Réservé - -
1E000 1E02F Supplément glagolitique U1E000 voir Alphabet glagolitique
1E030 1E0FF Réservé - -
1E100 1E14F Nyiakeng puachue hmong U1E800 voir Nyiakeng puachue hmong (en)
1E150 1E2DF Réservé - -
1E2C0 1E2FF Wancho U1E2C0 voir Wancho
1E300 1E7FF Réservé - -
1E800 1E8DF Kikakui mendé U1E800 voir Kikakui
1E8E0 1E8FF Réservé - -
1E900 1E95F Adlam U1E900 voir Alphabet adlam
1E960 1ECFF Réservé - -
1ED00 1ED4F Chiffres syaq U1ED00
1ED50 1ECFF Réservé - -
1EE00 1EEFF Symboles de l'alphabet mathématique arabe U1EE00 voir Mathématiques arabes
1EF00 1EFFF Réservé - -
1F000 1F02F Pièces de mah-jong U1F000 voir Mah-jong
1F030 1F09F Dominos U1F030 voir Dominos
1F0A0 1F0FF Cartes à jouer U1F0A0 voir Cartes à jouer
1F100 1F1FF Supplément alphanumérique cerclé U1F100 voir ARIB STD-B24 (en)
1F200 1F2FF Supplément idéographique cerclé U1F200 voir ARIB STD-B24 (en)
1F300 1F5FF Divers symboles et pictogrammes U1F300 voir Pictogramme, Emoji
1F600 1F64F Émoticônes U1F600 voir Émoticône, Emoji
1F650 1F67F Casseau ornemental U1F650 voir Wingdings
1F680 1F6FF Symboles du transport et cartographiques U1F680 voir Transport, Cartographie, Emoji
1F700 1F77F Symboles alchimiques U1F700 voir Alchimie
1F780 1F7FF Formes géométriques étendu U1F780 voir Forme géométrique
1F800 1F8FF Supplément C de flèches U1F800 voir Flèche
1F900 1F9FF Supplément de symboles et pictogrammes U1F900 voir Pictogramme, Émoticône, Emoji
1FA00 1FA6F Réservé - -
1FA70 1FAFF Symboles et pictogrammes étendu-A U1FA70 voir Pictogramme, Emoji
1FB00 1FFFF Réservé - -

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

Points de code Nom officiel du bloc En savoir plus
Début Fin
20000 2A6DF Supplé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
2A6E0 2A6FF Réservé -
2A700 2B73F Supplément C aux idéogrammes unifiés CJC
(Partie 1) (Partie 2)
voir Chinois, japonais et coréen
2B740 2B81F Supplément D aux idéogrammes unifiés CJC voir Chinois, japonais et coréen
2B820 2CEAF Supplément E aux idéogrammes unifiés CJC[16] voir Chinois, japonais et coréen
2CEB0 2EBEF Supplément F aux idéogrammes unifiés CJC[17] voir Chinois, japonais et coréen
2EBF0 2F7FF Réservé[18] -
2F800 2FA1F Supplément aux idéogrammes de compatibilité CJC voir Chinois, japonais et coréen
2FA20 2FFFF Réservé -

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

Points de code Nom officiel du bloc En savoir plus
Début Fin
30000 3FFFF Ré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
40000 4FFFF Ré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
50000 5FFFF Ré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
60000 6FFFF Ré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
70000 7FFFF Ré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
80000 8FFFF Ré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
90000 9FFFF Ré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
A0000 AFFFF Ré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
B0000 BFFFF Ré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
C0000 CFFFF Ré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
D0000 DFFFF Ré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
E0000 E007F Étiquettes
E0080 E00FF Réservé[30] -
E0100 E01EF Supplément de sélecteurs de variante
E01F0 EFFFF Ré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
F0000 FFFFF Zone 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)
UF0000 Aucun caractère officiellement défini
100000 10FFFF Zone 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)
U100000 Aucun 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 18030etc.). 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) [1].
  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

Sur les autres projets Wikimedia :

Articles connexes

Liens externes

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