Unicode

Unicode est un standard informatique développé par le Consortium Unicode qui vise à donner à tout caractère de n'importe quel système d'écriture de langue un identifiant numérique unique, et ce de manière unifiée, quelle que soit la plate-forme informatique ou le logiciel.

Sommaire

But

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

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 peu connus (parce que disparus, par exemple).

Cependant, tous les systèmes les plus utilisés dans le monde sont représentés, 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 ?).

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, ne précise cependant ni les règles de composition de caractère, 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.

Les caractères de la version 3.0 d'Unicode ont les mêmes identifiants que ceux de la norme ISO/CEI 10646:2000.

La version 3.2 d'Unicode classe 95 221 caractères, symboles et directives.

La version actuelle est la version 4.0.1 de mars 2004.

Des problèmes semblent cependant exister, pour le codage des caractères chinois .

La limite de l'octet

Là où l'ASCII utilisait jadis 7 bits et le latin-1, ou ISO 8859-1, 8 bits (comme l'ISO 8859-15 et 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 puis est désormais placée entre 20 et 21 bits par caractère.

UTF, Unicode Transformation Format

Pour différentes raisons, Unicode accepte trois formes de présentation pour représenter un caractère (au sens de symbole) : l'UTF-8, l'UTF-16 et l'UTF-32. Le chiffre après UTF représente le nombre de bits sur lequel le caractère est codé.

UTF-8

L'UTF-8 est le plus commun pour les applications Internet. Son codage de taille variable lui permet d'être en moyenne moins coûteux en occupation mémoire, mais ralentit nettement les opérations où interviennent des extractions de sous-chaînes. L'UTF-8 assure aussi une compatibilité avec les manipulations simples de chaînes en ASCII ou latin-1 dans les langages de programmation. UTF-8 est donc compatible avec les anciens programmes. En UTF-8, par exemple, le « é » est codé « Ã© », et « Gaïa » est une chaîne de quatre caractères (Gaïa).

UTF-16

L'UTF-16 est un bon compromis lorsque la place mémoire n'est pas trop restreinte, car la très grande majorité des caractères Unicode assignés pour l'instant, qui sont les caractères les plus fréquemment utilisés, peut être représentée sur 16 bits. Il a l'avantage que tous les caractères prennent, au minimum, la même place (2 octets). C'est notamment l'encodage qu'utilise la plateforme Java en interne.

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

Les polices de caractères Unicode

Avant de parler de police Unicode, il faut bien comprendre un principe essentiel : dire qu'Unicode code des caractères revient à dire qu'il attribue un numéro à des symboles. Unicode ne code en revanche pas les descriptions des caractères, les glyphes, c'est-à-dire la représentation graphique du caractère. Il n'y a donc pas une bijection entre la représentation du caractère et son numéro comme c'est le cas dans une police ASCII ou latin-1 classique.

Ainsi, le caractère français é peut-il ê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). De nombreux glyphes sont dans ce cas et peuvent être codés de ces deux manières. Le plus souvent, le glyphe précomposé est préférable (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 sont parfois mal disposés et peu lisibles).

De même, certains systèmes d'écriture, comme la devânagarî ou les caractères arabes, nécessitent un traitement complexe des ligatures : les graphèmes changent en effet de forme en fonction de leur position et/ou par rapport à leurs voisines (cf. Variante contextuelle et Lettre conjointe).

On comprend donc que le terme de police Unicode doit être utilisé très prudemment. Avoir une police qui représente un certain nombre ou toutes les représentations graphiques que l'on peut obtenir avec Unicode n'est pas suffisant, il faut en plus que le système d'affichage possède les mécanismes de représentation idoines (ce que l'on nomme le moteur de rendu) capable de gérer les ligatures, variantes contextuelles et formes conjointes de certaines écritures. Au contraire, une police qui ne représente que certains caractères mais qui sait comment les afficher mérite mieux le terme de police Unicode.

Détails techniques

Bibliothèques logicielles

La bibliothèque multiplateforme ICU permet de manipuler des données unicodées. Un support d'Unicode spécifique à certaines plateformes (non compatible quant au code-source) est également fourni par les systèmes modernes (Java, MFC, GNU/Linux).

Partitionnement

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 »
 #
 #
 # Code de début ..Code de fin; nom du Bloc
 0000..007F; Latin de base
 0080..00FF; Supplément Latin-1
 0100..017F; Latin étendu A
 0180..024F; Latin étendu B
 0250..02AF; Alphabet phonétique international (API)
 02B0..02FF; Lettres modificatives avec chasse
 0300..036F; Diacritiques
 0370..03FF; Grec et copte
 0400..04FF; Cyrillique
 0500..052F; Supplément cyrillique
 0530..058F; Arménien
 0590..05FF; Hébreu
 0600..06FF; Arabe
 0700..074F; Syriaque
 0780..07BF; Thâna
 0900..097F; Dévanâgarî
 0980..09FF; Bengali
 0A00..0A7F; Gourmoukhî
 0A80..0AFF; Goudjerate
 0B00..0B7F; Oriya
 0B80..0BFF; Tamoul
 0C00..0C7F; Télougou
 0C80..0CFF; Kannara
 0D00..0D7F; Malayalam
 0D80..0DFF; Singhalais
 0E00..0E7F; Thaï
 0E80..0EFF; Lao
 0F00..0FFF; Tibétain
 1000..109F; Birman
 10A0..10FF; Géorgien
 1100..11FF; Jamos hangûl
 1200..137F; Éthiopien
 13A0..13FF; Chérokî
 1400..167F; Syllabaires autochtones canadiens
 1680..169F; Ogam
 16A0..16FF; Runes
 1700..171F; Tagalog ou tagal
 1720..173F; Hanounóo
 1740..175F; Bouhid
 1760..177F; Tagbanoua
 1780..17FF; Khmer
 1800..18AF; Mongol
 1900..194F; Limbu
 1950..197F; Taï-le
 19E0..19FF; Symboles khmers
 1D00..1D7F; Supplément phonétique
 1E00..1EFF; Latin étendu additionnel
 1F00..1FFF; Grec étendu
 2000..206F; Ponctuation générale
 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
 2300..23FF; Signes techniques divers. 2336 à 237A = symboles APL
 2400..243F; Pictogrammes de commande
 2440..245F; 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
 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
 2E80..2EFF; Formes supplémentaires des clés CJC
 2F00..2FDF; Clés chinoises (K'ang-hsi ou Kangxi)
 2FF0..2FFF; Description idéophonographique
 3000..303F; Symboles et ponctuation CJC
 3040..309F; Hiragana
 30A0..30FF; Katakana
 3100..312F; Bopomofo
 3130..318F; Jamos de compatibilité hangûl
 3190..319F; Kanboun
 31A0..31BF; Bopomofo étendu
 31F0..31FF; Extension phonétique katakana
 3200..32FF; Lettres et mois CJC cerclés
 3300..33FF; Compatibilité CJC
 3400..4DB5; Supplément A aux idéophonogrammes unifiés CJC
 4DC0..4DFF; Hexagrammes du Classique des mutations ou Yi-king
 4E00..9FA5; Idéophonogrammes unifiés CJC
 A000..A48F; Syllabaire yi des Monts frais
 A490..A4CF; Clés yi
 AC00..D7A3; Hangûl
 D800..DB7F; Demi-zone haute
 ☒DB80..DBFF; Partie à usage privé de la demi-zone haute
 DC00..DFFF; Demi-zone basse
 ☒E000..F8FF; Zone à usage privé
 F900..FAFF; Idéogrammes de compatibilité CJC
 FB00..FB4F; Formes de présentation alphabétiques
 FB50..FDFF; Formes A de présentation arabes
 FE00..FE0F; Sélecteurs de variante
 FE20..FE2F; Demi-signes combinatoires
 FE30..FE4F; Formes de compatibilité CJC
 FE50..FE6F; Petites variantes de forme
 FE70..FEFF; Formes B de présentation arabes
 FF00..FFEF; Formes de demi et pleine chasse
 FFF0..FFFF; Caractères spéciaux
 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
 10380..1039F; 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
 #
 20000..2A6D6; Supplément B aux idéogrammes unifiés CJC
 2F800..2FA1F; Supplément aux idéogrammes de compatibilité CJC
 #
 E0000..E007F; Étiquettes
 E0100..E01EF; Supplément de sélecteur de variante
 #
 ☒FFF80..FFFFF; Zone supplémentaire A à usage privé 
 ☒10FF80..10FFFF; Zone supplémentaire B à usage privé
 

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.

Voir aussi

Liens externes

Autres références

See also: Unicode, 1991, APL (langage), ASCII, Alphabet arabe, Bijection, Bit, Caractère, Casse, Classement alphabétique