UNICODE(7)

NOM
Unicode - Jeu de caractères universel

DESCRIPTION
La norme internationale ISO 10646 définit le jeu de caractères universel (UCS). UCS contient tous les caractères de tous les autres normes de jeux de caractères. Il garantit également une « compatibilité circulaire », ce qui signifie que les tables de conversions peuvent être construites de manière à ne perdre aucune information quand une chaîne de caractères est convertie dans un autre encodage, puis reconvertie en sens inverse. UCS contient les caractères nécessaires pour représenter presque toutes les langues connus. Il inclut non seulement les alphabets latin, grec, cyrillique, hébreu, arabe, arménien et géorgien, mais également les idéogrammes chinois, japonais, sino-coréens et les écritures : hiragana, katakana, hangûl, dévanâgarî, bengali, gourmoukhî, goudjarati, oriya, tamoul, télougou, kannara, malayalam, thaï, laotien, khmer, bopomofo, tibétain, runes, éthiopien, syllabaires canadiens, chérokî, mongol, ogam, birman, cingalais, thâna, yi, et d'autres. Pour les écritures qui n'ont pas encore été intégrées, des recherches sont en cours pour optimiser l’encodage et elles seront probablement ajoutées. Cela inclut non seulement des hiéroglyphes et des langues indo-européennes historiques, mais aussi des écritures artistiques comme les tengwar de Fëanor, les cirth, ou le klingon. UCS contient également un grand nombre de symboles graphiques, typographiques, mathématiques et scientifiques comme ceux fournis par TeX, PostScript, APL, MS-DOS, MS-Windows, Macintosh, les polices OCR, et de nombreux traitements de texte et systèmes d'édition, et de plus en plus sont ajoutés. La norme 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 de la norme (ISO 10646-1) définit les 65 534 premiers codes (0x0000 à 0xFFFD) qui forment le plan multilingue de base (PMB), c'est-à-dire le plan 0 du groupe 0. La partie 2 de la norme (ISO 10646-2) ajoute des caractères au groupe 0 en dehors du PMB, dans plusieurs plans supplémentaires de l'espace 0x10000 à 0x10ffff. On ne prévoit pas d'ajouter à la norme des caractères au-delà de 0x10ffff. Ainsi sur l'ensemble de l'espace disponible, une faible fraction du groupe 0 ne sera effectivement utilisée dans un futur proche. Le PMB 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, des dictionnaires d'impression, l'industrie de l'impression, des protocoles de plus 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 (seulement pour les caractères du BMP), alors que UCS-4 est la représentation des caractères par un mot de 4 octets. De plus, il existe deux formes d’encodage : UTF-8 pour la rétrocompatibilité avec les logiciels traitant l'ASCII et UTF-16 pour les traitements des caractères non PMB jusqu'à 0x10ffff par des logiciels UCS-2.

Les caractères UCS 0x0000 à 0x007f sont identiques à ceux du jeu classique 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 de l'UCS ont été assignés à des caractères composés. Ils sont semblables aux touches mortes d'accents sur les machines à écrire. Un caractère composé ajoute simplement un accent sur le caractère précédent. Les caractères accentués les plus importants ont leur propre code dans l'UCS. Cependant, 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 « À » (lettre majuscule latine A accent grave) peut être représenté soit par le code UCS précomposé 0x00C0, soit par la combinaison d'un A majuscule normal, suivi d'un « diacritique accent grave », 0x0041 0x0300.

Les caractères composés sont essentiels par exemple pour l’encodage de l'écriture thaï 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 gérer les mécanismes avancés 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 jamos hangûl (un encodage spécial de l'écriture coréenne, où les syllabes hangûl sont encodées par 2 ou 3 codes de voyelle ou consonne) ne sont pas gérés.

Niveau 2
    Outre le niveau 1, les caractères composés sont maintenant permis pour certaines langues où ils sont essentiels (par exemple, le thaï, le laotien, l'hébreu, l'arabe, le dévanâgarî ou le malayalam).

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

La norme Unicode 3.0 publié par le Consortium Unicode contient exactement le plan multilingue de base UCS au niveau 3 de l’implémentation, comme décrit dans la norme ISO 10646-1:2000. Unicode 3.1 ajoute les plans supplémentaires de l'ISO 10646-2. La norme Unicode et les rapports techniques publiés par le Consortium Unicode fournissent beaucoup de renseignements supplémentaires sur la sémantique et les recommandations d’utilisation de nombreux caractères. Elles 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 toujours interprétée par la bibliothèque C comme un code UCS (dans tous les paramètres régionaux), une convention signalée par la bibliothèque C de GNU pour les applications en définissant la constante __STDC_ISO_10646__ comme indiquée dans la norme ISO C99. L'UCS/Unicode peut être employé comme l'ASCII dans les flux d'entrée-sortie, les communications avec les terminaux, les fichiers textes, les noms de fichier et les variables d'environnement dans un encodage multioctet UTF-8 compatible ASCII. Pour signaler l'utilisation de l'UTF-8 comme encodage pour toutes les applications, des paramètres régionaux (locale) adéquats doivent être configurés dans les variables d'environnement (par exemple, « LANG=fr_FR.UTF-8 »).

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

  Zone privée
L'intervalle entre 0xe000 et 0xf8ff du plan multilingue de base ne sera jamais assigné a aucun caractère par la norme et est réservé pour une utilisation privé. Pour la communauté Linux, cette zone privée a été divisée en deux. L'intervalle entre 0xe000 et 0xefff peut être utilisé individuellement par n'importe quel utilisateur final. 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 maintenu par LANANA et le registre lui-même est Documentation/unicode.txt dans les sources du noyau Linux.

  Littérature

*   Information technology — Universal Multiple-Octet Coded Character Set (UCS) — Part 1: Architecture and Basic Multilingual Plane. International Standard ISO/IEC 10646-1, International Organization for Standardization, Geneva, 2000. Il s'agit des spécifications officielles de l'UCS. Disponible 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 sur le langage de programmation C. La quatrième édition couvre maintenant l'amendement 1 de 1994 à la norme ISO C90, qui ajoute un grand nombre de fonctions de bibliothèque C pour manipuler les jeux de caractères larges et multioctets, mais ne couvre pas encore l'ISO C99, qui améliore encore plus la gestion des caractères larges et multioctets.

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

*   Markus Kuhn : UTF-8 and Unicode FAQ for UNIX/Linux.
    http://www.cl.cam.ac.uk/~mgk25/unicode.html

*   Bruno Haible : Unicode HOWTO.
    http://guidespratiques.traduc.org/lecture/Unicode-HOWTO.html

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

COLOPHON
Cette page fait partie de la publication 3.70 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse http://www.kernel.org/doc/man-pages/.

TRADUCTION
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.

Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal <http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et l'équipe francophone de traduction de Debian (2006-2009).

Veuillez signaler toute erreur de traduction en écrivant à <perkamon-fr@traduc.org>.

Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « LC_ALL=C man <section> <page_de_man> ».