La bibliothèque multi plate-forme ICU permet de manipuler des données unicodées. Un support d’Unicode spécifique à certaines plates-formes (non compatible quant au code-source) est également fourni par les systèmes modernes (Java, MFC, GNU/Linux).
Les types à utiliser pour stocker des variables Unicode, sont les suivants :
Langage de programmation | Type pour un seul caractère | Type pour tout texte |
---|---|---|
C | char[4] [0] ou wchar_t[2] [1] | char[] ou wchar_t[] |
C++ | char[4] [0] ou wchar_t[2] [1] | char[] ou wchar_t[] ou std::wstring |
Java | char[2] ou int [2] | char[] ou String |
Bibliothèque ICU (pour C/C++ ou Java) | UChar | UChar[] ou String , UnicodeString |
Javascript ou ECMAScript | char [3] | string |
C# ou J# | char | string |
Delphi | char[4] [0] ou widechar[2] | string [0] ou widestring |
Python | unicode |
Notes :
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 normalisé. 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.char
est un entier positif sur 16 bits seulement). Pour manipuler les caractères normalisé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).char
sur 32 bits devant supporter tous les points de code des 17 plans normalisés. 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.
Le partitionnement à jour peut être trouvé sur le site officiel d’Unicode. Cependant, vu le rôle important d’Unicode, (ISO 10646) on décrira ici les principaux blocs de caractères. Les noms français sont les noms officiels de l’ISO/CEI 10646, la norme internationale bilingue qui reprend les mêmes caractères qu’Unicode. Ils sont aussi officiels que les noms anglais.
Note : La casse des noms de bloc n’est pas normative. « Latin de base » est donc équivalent à « LATIN DE BASE ».
Points de code | Nom officiel du bloc | Commentaires | |
---|---|---|---|
Début | Fin | ||
0000 | FFFF | Plan multilingue de base (PMB) | |
0000 | 007F | Latin de base | voir norme ISO 646, code ASCII |
0080 | 009F | Non-utilisé | voir plage non-utilisé norme ISO 8859 et ISO 8859-1 |
00A0 | 00FF | Supplément Latin-1 | voir norme ISO 8859, code ISO 8859-1 |
0100 | 017F | Latin étendu A | |
0180 | 024F | Latin étendu B | |
0250 | 02AF | Alphabet phonétique international (API) | Alphabet phonétique international |
02B0 | 02FF | Lettres modificatives avec chasse | |
0300 | 036F | Diacritiques | voir Diacritique |
0370 | 03FF | Grec et copte | |
0400 | 04FF | Cyrillique | voir Alphabet cyrillique |
0500 | 052F | Supplément cyrillique | voir Alphabet cyrillique |
0530 | 058F | Arménien | voir langue Arménien |
0590 | 05FF | Hébreu | voir Alphabet hébreu |
0600 | 06FF | Arabe | voir alphabet arabe |
0700 | 074F | Syriaque | voir langue Syriaque |
0780 | 07BF | Thâna | |
0900 | 097F | Dévanâgarî | |
0980 | 09FF | Bengali | voir langue indienne Bengalî |
0A00 | 0A7F | Gourmoukhî | |
0A80 | 0AFF | Goudjerate | |
0B00 | 0B7F | Oriya | voir langue indienne Oriya |
0B80 | 0BFF | Tamoul | voir langue indienne Tamoul |
0C00 | 0C7F | Télougou | voir langue indienne Télougou |
0C80 | 0CFF | Kannara | voir langue indienne Kannara |
0D00 | 0D7F | Malayalam | voir langue indienne Malayalam |
0D80 | 0DFF | Singhalais | voir langue indo-européenne Cingalais |
0E00 | 0E7F | Thai | voir langue asiatique Thai |
0E80 | 0EFF | Lao | voir langue asiatique Lao |
0F00 | 0FFF | Tibétain | voir langue asiatique Tibétain |
1000 | 109F | Birman | voir langue asiatique Birman |
10A0 | 10FF | Géorgien | voir langue Géorgien |
1100 | 11FF | Jamos hangûl | |
1200 | 137F | Éthiopien | voir Alphabet éthiopien |
13A0 | 13FF | Chérokî | |
1400 | 167F | Syllabaires autochtones canadiens unifiés | |
1680 | 169F | Ogam | voir Écriture oghamique |
16A0 | 16FF | Runes | voir Alphabet runique |
1700 | 171F | Tagalog | ou tagal, voir langue Tagalog |
1720 | 173F | Hanounóo | |
1740 | 175F | Bouhide | |
1760 | 177F | Tagbanoua | |
1780 | 17FF | Khmer | voir langue Khmer |
1800 | 18AF | Mongol | voir langue mongol (Монгол хэл, mongγol kele) |
1900 | 194F | Limbou | |
1950 | 197F | Taï-le | |
19E0 | 19FF | Symboles khmers | voir langue Khmer |
1D00 | 1D7F | Supplément phonétique | |
1E00 | 1EFF | Latin étendu additionnel | |
1F00 | 1FFF | Grec étendu | |
2000 | 206F | Ponctuation générale | voir aussi ponctuation |
2070 | 209F | Exposants et indices | |
20A0 | 20CF | Symboles monétaires | |
20D0 | 20FF | Signes combinatoires pour symboles | |
2100 | 214F | Symboles de type lettre | |
2150 | 218F | Formes numérales | |
2190 | 21FF | Flèches | |
2200 | 22FF | Opérateurs mathématiques | voir Opérateurs mathématiques |
2300 | 23FF | Signes techniques divers | 2336 à 237A = symboles APL |
2400 | 243F | Pictogrammes de commande | |
2440 | 245F | Reconnaissance optique de caractères | voir Reconnaissance optique de caractères |
2460 | 24FF | Alphanumériques cerclés | |
2500 | 257F | Filets | |
2580 | 259F | Pavés | |
25A0 | 25FF | Formes géométriques | |
2600 | 26FF | Symboles divers | |
2700 | 27BF | Casseau | |
27C0 | 27EF | Divers symboles mathématiques - A | |
27F0 | 27FF | Supplément A de flèches | |
2800 | 28FF | Combinaisons Braille | voir Braille |
2900 | 297F | Supplément B de flèches | |
2980 | 29FF | Divers symboles mathématiques-B | |
2A00 | 2AFF | Opérateurs mathématiques supplémentaires | |
2B00 | 2BFF | Divers symboles et flèches | |
2D30 | 2D6F | Alphabet Tifinagh et néo-Tifinagh | voir Alphabet berbère et Tifinagh (langue berbère) |
2E80 | 2EFF | Formes supplémentaires des clés CJC | voir Chinois, japonais et coréen (CJC) |
2F00 | 2FDF | Clés chinoises (K'ang-hsi ou Kangxi) | voir Dictionnaire de caractères de Kangxi |
2FF0 | 2FFF | Description idéophonographique | |
3000 | 303F | Symboles et ponctuation CJC | voir ponctuation et Chinois, japonais et coréen (CJC) |
3040 | 309F | Hiragana | voir Hiragana (langue japonaise) |
30A0 | 30FF | Katakana | voir Katakana (langue japonaise) |
3100 | 312F | Bopomofo | voir Bopomofo (notation taïwanaise et chinoise) |
3130 | 318F | Jamos de compatibilité hangûls | |
3190 | 319F | Kanboun | |
31A0 | 31BF | Bopomofo étendu | voir Bopomofo (notation taïwanaise et chinoise) |
31F0 | 31FF | Extension phonétique katakana | voir Katakana (langue japonaise) |
3200 | 32FF | Lettres et mois CJC cerclés | voir Chinois, japonais et coréen (CJC) |
3300 | 33FF | Compatibilité CJC | voir Chinois, japonais et coréen (CJC) (unités de mesure) |
3400 | 4DB5 | Supplément A aux idéophonogrammes unifiés CJC | voir Chinois, japonais et coréen (CJC) |
4DC0 | 4DFF | Hexagrammes du Classique des mutations ou Yi-king | |
4E00 | 9FA5 | Idéophonogrammes unifiés CJC | voir Chinois, japonais et coréen (CJC) |
A000 | A48F | Syllabaire yi des Monts frais | |
A490 | A4CF | Clés yi | |
AC00 | D7A3 | Hangûl | |
D800 | DB7F | Demi-zone haute | points de code invalides isolément D800 à D83F : codets hauts utilisés en UTF-16 pour les points de code du plan multilingue complémentaire |
☒DB80 | DBFF | Partie à usage privé de la demi-zone haute | points de code invalides isolément DB80 à DBBF : codets hauts utilisés en UTF-16 pour les points de code de la zone supplémentaire A à usage privé |
DC00 | DFFF | Demi-zone basse | points de code invalides isolément DC80 à DFFD : codets bas utilisés en UTF-16 pour des points de code assignés aux caractères valides ou réservés des plans complémentaires (assignés, réservés ou à usage privé) |
☒E000 | F8FF | Zone à usage privé | |
F900 | FAFF | Idéogrammes de compatibilité CJC | voir Chinois, japonais et coréen (CJC) |
FB00 | FB4F | Formes de présentation alphabétiques | |
FB50 | FDFF | Formes A de présentation arabes | voir alphabet arabe |
FDD0 | FDEF | non-caractères | |
FE00 | FE0F | Sélecteurs de variante | |
FE20 | FE2F | Demi-signes combinatoires | |
FE30 | FE4F | Formes de compatibilité CJC | voir Chinois, japonais et coréen (CJC) |
FE50 | FE6F | Petites variantes de forme | |
FE70 | FEFF | Formes B de présentation arabes | |
FF00 | FFEF | Formes de demi et pleine chasse | |
FFF0 | FFFD | Caractères spéciaux | |
FFFE | FFFF | non-caractères | |
10000 | 1FFFF | Plan multilingue complémentaire (PMC) | |
10000 | 1007F | Syllabaire linéaire B ou syllabaire mycénien | |
10080 | 100FF | Idéogrammes du linéaire B | |
10100 | 1013F | Nombres égéens | |
10300 | 1032F | Alphabet italique | |
10330 | 1034F | Gotique | voir langue Gotique |
10380 | 1039F | Ougaritique | voir langue Ougaritique |
10400 | 1044F | Déséret | |
10450 | 1047F | Shavien | |
10480 | 104AF | Osmanya | |
10800 | 1083F | Syllabaire chypriote | |
1D000 | 1D0FF | Symboles musicaux byzantins | |
1D100 | 1D1FF | Symboles musicaux occidentaux | |
1D300 | 1D35F | Symboles du Classique du mystère suprême | |
1D400 | 1D7FF | Symboles mathématiques alphanumériques | |
1FFFE | 1FFFF | non-caractères | |
20000 | 2FFFF | Plan idéographique complémentaire (PIC) | |
20000 | 2A6D6 | Supplément B aux idéogrammes unifiés CJC | |
2F800 | 2FA1F | Supplément aux idéogrammes de compatibilité CJC | |
2FFFE | 2FFFF | non-caractères | |
30000 | DFFFF | Plans complémentaires réservés | |
3FFFE | 3FFFF | non-caractères | |
4FFFE | 4FFFF | non-caractères | |
5FFFE | 5FFFF | non-caractères | |
6FFFE | 6FFFF | non-caractères | |
7FFFE | 7FFFF | non-caractères | |
8FFFE | 8FFFF | non-caractères | |
9FFFE | 9FFFF | non-caractères | |
AFFFE | AFFFF | non-caractères | |
BFFFE | BFFFF | non-caractères | |
CFFFE | CFFFF | non-caractères | |
DFFFE | DFFFF | non-caractères | |
E0000 | EFFFF | Plan complémentaire spécialisé (PCS) | |
E0000 | E007F | Étiquettes | |
E0100 | E01EF | Supplément de sélecteurs de variante | |
EFFFE | EFFFF | non-caractères | |
F0000 | 10FFFF | Plans complémentaires à usage privé | |
☒F0000 | FFFFD | Zone supplémentaire A à usage privé | |
FFFFE | FFFFF | non-caractères | |
☒100000 | 10FFFD | Zone supplémentaire B à usage privé | |
10FFFE | 10FFFF | non-caractères |
Les zones à usage privé indiquées par le symbole ☒ 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 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 listés sont des points de code valides, mais ils ne sont pas (et ne seront jamais) assignés à des caractères normalisé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 normalisées (dont UTF-8, UTF-16, UTF-32) les schémas de codage correspondants, et les autres codages normalisés compatibles avec Unicode et ISO 10646 (BOCU-1, SCSU, différentes versions de la norme chinoise GB18030, 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 normalisé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é normalisé, 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 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).