UNICODE(7)

NOM
unicode - Le jeu de caractères universel

DESCRIPTION
Le standard international ISO 10646 définit le Universal Character Set (UCS). UCS contient tous les caractères de tous les autres jeux de caractères standards. Il garantit également une compatibilité circulaire, ce qui signifie que les tables de conversions permettent de ne perdre aucune information quand une chaîne de caractères est convertie dans un autre codage, puis reconvertie en sens inverse. UCS contient les caractères nécessaires pour représenter presque tous les langages connus. Il inclut non seulement les alphabets Latin, Grec, Cyrillique, Hébreu, Arabe, Arménien, et Géorgien, mais également Chinois Japonais, Hiragana, Katakana, Coréen, Hangul, Devanagari, Bengali, Gurmukhi, Gujarati, Oriya, Tamil, Telugu, Kannada, Malayam, Thai, Lao, Khmer, Bopomofo, Tibétain, Runique, Ethiopien, Canadien Syllabique, Cherokee, Mongol, Ogham, Myanmar, Sinhala, Thaana, Yi, et d'autres. Pour les écritures pas encore intégrées, des recherches sont en cours pour optimiser l'encodage et elles seront ajoutées. Ceci peut inclure non seulement des hiéroglyphes et des langues indo-européennes, mais aussi des écritures artistiques comme Tengwar, Cirth, ou Klingon. UCS contient un grand nombre de symboles graphiques, typographiques, mathématiques, ou scientifiques comme ceux fournis par TeX, Postscript, MS-DOS, MacIntosh, Videotext, OCR, et de nombreux traitements de texte et système d'édition. Le standard UCS (ISO 10646) décrit un jeu de caractères sur 31 bits, constitué de 128 groupes sur 24 bits, chacun d'eux divisés en 256 plans sur 16 bits, composés de 256 rangées de 8 bits, avec 256 positions en colonne contenant chacune un caractère. La première partie du standard (ISO 10646-1) définit les 65534 premiers codes (0x0000 à 0xFFFD) qui forme le Basic Multilingual Plane (BMP), c'est à dire le plan 0 du groupe 0. La partie 2 du standard (ISO 10646-2) ajoute des caractères au groupe 0, dans plusieurs plans supplémentaires dans l'espace 0x10000 à 0x10ffff. On ne prévoit pas d'ajouter de caractères au-delà de 0x10ffff, ainsi sur l'ensemble de l'espace disponible, une faible fraction du groupe 0 est effectivement utilisable dans un futur à court terme. Le BMP contient tous les caractères des jeux habituels. Les plans supplémentaires ajoutés par ISO 10646-2 ne contiennent que des caractères exotiques pour des notations scientifiques spéciales, l'industrie de l'impression, des protocoles de haut-niveau, et les besoins de quelques enthousiastes.

La représentation des caractères UCS sur des mots de 2 octets est appelée UCS-2 (ne contient que les caractères du BMP), alors que UCS-4 est la représentation sur un mot de 4 octets. De plus, il existe deux formes UTF-8 pour les compatibilités avec les logiciels traitant l'ASCII et UTF-16 pour les traitement des caractères au-delà de 0x10ffff par des logiciels UCS-2.

Les caractères UCS 0x0000 à 0x007F sont identiques à ceux du classique jeu US-ASCII, et ceux de l'intervalle 0x0000 à 0x00FF sont identiques à ceux du jeu de caractères ISO 8859-1 Latin-1.

  Caractères composés
Quelques codes du UCS ont été assignés à des caractères composés. Ils sont semblables aux touches accentuées sans avance sur les machines à écrire. Un caractère composé ajoute simplement un accent sur le caractère précédent (contrairement aux machines à écrire qui agissent sur le caractère suivant). Les caractères accentués les plus importants ont leurs propres codes dans l'UCS néanmoins le mécanisme des caractères composés permet d'ajouter des accents ou des signes diacritiques sur n'importe quel caractère de base. Les caractères composés suivent toujours le caractère qu'ils modifient. Par exemple, le caractère allemand A-Umlaut (A majuscule avec un tréma) peut être représenté soit par le code UCS précomposé 0x00C4, ou par la combinaison d'un A majuscule normal, suivi d'un « tréma composé » (combining diaeresis), 0x0041 0x0308.

Les caractères composés sont essentiels par exemple pour l'encodage de l'écriture Thai ou pour les notations mathématiques et l'alphabet phonétique international.

  Niveaux d'implémentation
Comme tous les systèmes ne sont pas censés supporter les mécanismes comme les caractères composés, ISO 10646-1 spécifie les trois niveaux d'implémentation suivants pour l'UCS :

Niveau 1
    Les caractères composés et les caractères Hangul Jamo (un encodage spécial et compliqué de l'écriture Coréenne, où les syllabes Hangul sont codées sur 2 ou 3 sous-caractères) ne sont pas supportés.

Niveau 2
    Comme le niveau 1, mais ce n'est qu'avec certaines écritures (par exemple Hébreu, Arabe, Devangari, Bengali, Gurmukhi, Gujarati, Oriya, Tamil, Telugo, Kannada, Malayalam, Thai et Lao) qu'il y a des caractères composés non supportés.

Niveau 3
    Tous les caractères UCS sont supportés.

Le standard Unicode 3.0 publié par le Unicode Consortium contient exactement le Basic Multilingual Plane UCS au niveau d'implémentation 3, comme décrit dans le ISO 10646-1:2000. Unicode 3.1 ajoute les plans supplémentaires de l'ISO 10646-2. Le standard Unicode et les rapports techniques publiés par le Consortium fournissent beaucoup d'informations supplémentaires sur la sémantique et les recommandations d'usage. Ils fournissent des guides et des algorithmes pour éditer, trier comparer, normaliser, convertir et afficher des chaînes Unicode.

  Unicode sous Linux
Sous GNU/Linux, le type C wchar_t est un entier 32 bits signé, et sa valeur est interprétée comme un code UCS (dans toutes les localisations), une convention signalée par la glibc en définissant la constante __STDC_ISO_10646__ comme indiquée dans le standard ISO C 99. L'UCS/Unicode peut être employé comme l'ASCII dans les flux d'entrées-sorties, les communications avec les terminaux, les fichiers de texte, les noms de fichiers et les variables d'environnement dans un encodage multi-octets compatible UTF-8. Pour signaler l'utilisation de l'UTF-8 comme encodage pour toutes les applications, une locale correcte doit être configurée dans les variables d'environnement (ex. « LANG=en_GB.UTF-8 »).

La fonction nl_langinfo(CODESET) renvoie le nom de l'encodage sélectionné. Les fonctions de bibliothèques comme wctomb(3) et mbsrtowcs(3) peuvent être utilisées pour transformer les caractères wchar_t et les chaînes dans le jeu de caractères du système et inversement. La fonction wcwidth(3) indique combien de positions (0–2) le curseur est avancé en sortant un caractère.

Sous Linux, en général, seule une implémentation BMP de niveau 1 devrait être utilisée pour le moment. Pour certaines écritures (en particulier Thai), certains émulateurs de terminaux UTF-8 gèrent jusqu'à deux caractères combinés avec une fonte ISO 10646 (niveau 2), mais il vaut mieux préférer les caractères précomposés s'ils sont disponibles.

  Zone privée
L'intervalle entre 0xE000 et 0xF8FF du BMP, ne sera jamais assigné a aucun caractère par le standard, et est réservé pour un usage privé. Pour la communauté Linux, cette zone privée a été subdivisée en deux. L'intervalle entre 0xe000 et 0xefff peut être utilisé individuellement par n'importe quelle application. L'intervalle s'étendant de 0xF000 à 0xF8FF est réservé à Linux, et les extensions y sont coordonnées entre les divers utilisateurs de Linux. L'enregistrement des caractères assignés à la zone Linux est actuellement maintenu par H. Peter Anvin <Peter.Anvin@linux.org>.

  Littérature

*   Information technology - Universal Multiple-Octet Coded Character Set (UCS) - Part 1: Architecture and Basic Multilingual Plane. International Standard ISO 10646-1, International Organization for Standardization, Geneva, 2000. Ce sont les spécifications officielles de l'UCS. Disponible en fichier PDF sur CD-ROM sur http://www.iso.ch/.

*   The Unicode Standard, Version 3.0. The Unicode Consortium, Addison-Wesley, Reading, MA, 2000, ISBN 0-201-61633-5.

*   S. Harbison, G. Steele. C - A Reference Manual. Fourth edition, Prentice Hall, Englewood Cliffs, 1995, ISBN 0-13-326224-3. Un bon livre de référence à propos du langage C. La 4ème édition couvre maintenant l'amendement 1 (1994) au standard ISO C (ISO/IEC 9899:1990) qui ajoute un grand nombre de fonctions de bibliothèque C pour manipuler les jeux de caractères, mais ne couvre pas encore C99.

*   Unicode Technical Reports.
    http://www.unicode.org/unicode/reports/

*   Markus Kuhn: UTF-8 and Unicode FAQ for Unix/Linux.
    http://www.cl.cam.ac.uk/~mgk25/unicode.html Fournit les informations sur la liste de diffusion linux-utf8, le meilleur endroit pour trouver des conseils sur l'utilisation de l'Unicode sous Linux

*   Bruno Haible: Unicode HOWTO.
    ftp://ftp.ilog.fr/pub/Users/haible/utf8/Unicode-HOWTO.html

BOGUES
Au moment de la rédaction de cette page, le support libc de Linux pour les locales UTF-8 était mûr, et le support XFree86 était avancé, mais le travail nécessaire pour rendre les applications (principalement les éditeurs) compatibles avec l'UTF-8 était en cours. Le support général actuel de UCS sous Linux fournit les caractères double-largeur CJK, et parfois les surcharges des caractères combinés, mais ne permet pas l'écriture de droite à gauche ou les ligatures nécessaires en Hébreu, Arabe, ou Indien. Ces écritures ne sont pour le moment supportées que par certaines applications graphiques (visualisateurs HTML, traitements de texte) avec des moteurs d'affichage perfectionnés.

VOIR AUSSI
setlocale(3), charsets(7), utf-8(7)

TRADUCTION

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 20 octobre 1996 et révisée le 22 décembre 2007.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 7 unicode ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.