Man page - utf8(7)

Packages contains this manual

Available languages:

en fr pt_BR es it pl cs ja ru ro de

Manual

UTF-8

NOM
DESCRIPTION
Propriétés
Encodage
Exemple
Notes applicatives
Sécurité
Normes
VOIR AUSSI
TRADUCTION

NOM

UTF-8 - Encodage Unicode multioctet compatible ASCII

DESCRIPTION

Le jeu de caractĂšres Unicode 3.0 est constituĂ© d’un encodage sur 16 bits. L’encodage Unicode le plus Ă©vident (connu sous le nom de UCS-2) consiste en une suite de mots de 16 bits. De telles chaĂźnes peuvent contenir, comme fragments de caractĂšre 16 bits, des octets comme « \0 » ou « / » qui ont une signification particuliĂšre dans les noms de fichiers et les paramĂštres de fonctions de bibliothĂšque C. De plus, la majoritĂ© des outils UNIX attendent des fichiers ASCII et ne peuvent pas lire des caractĂšres reprĂ©sentĂ©s par des mots de 16 bits sans subir de modifications majeures. Pour ces raisons, l’UCS-2 n’est pas un encodage externe de l’Unicode utilisable dans les noms de fichiers, les variables d’environnement, les fichiers textes, etc. Le jeu universel de caractĂšres (UCS — Universal Character Set) de la norme ISO/IEC 10646, un sur-ensemble d’Unicode, occupe mĂȘme un espace d’encodage plus important (31 bits) et l’encodage Ă©vident UCS-4 (une suite de mots sur 32 bits) a les mĂȘmes inconvĂ©nients.

L’encodage UTF-8 de l’Unicode et de l’UCS n’a pas ces inconvĂ©nients et est un moyen d’utiliser le jeu de caractĂšres Unicode sous les systĂšmes d’exploitation compatibles UNIX.

Propriétés

L’encodage UTF-8 a les propriĂ©tĂ©s suivantes.

-

Les caractĂšres UCS 0x00000000 Ă  0x0000007f (le jeu US-ASCII classique) sont encodĂ©s simplement par les octets 0x00 Ă  0x7f (compatibilitĂ© ASCII). Cela signifie que les fichiers et les chaĂźnes qui contiennent uniquement des caractĂšres du jeu ASCII 7 bits ont exactement le mĂȘme encodage en ASCII et en UTF-8.

-

Tous les caractĂšres UCS supĂ©rieurs Ă  0x7F sont encodĂ©s en une suite de multioctets constituĂ©e uniquement d’octets dans l’intervalle 0x80 Ă  0xfd. Ainsi aucun octet ASCII n’apparaĂźt en tant que partie d’un autre caractĂšre, et il n’y a donc pas de problĂšme avec « \0 » ou « / ».

-

L’ordre de tri lexicographique des chaĂźnes UCS-4 est prĂ©servĂ©.

-

Tous les 2^31 caractĂšres de l’UCS peuvent ĂȘtre encodĂ©s en utilisant UTF-8.

-

Les octets 0xc0, 0xc1, 0xfe et 0xff ne sont jamais utilisĂ©s dans l’encodage UTF-8.

-

Le premier octet d’une suite multioctet reprĂ©sentant un caractĂšre UCS non ASCII est toujours dans l’intervalle 0xc2 Ă  0xfd et indique la longueur de la suite multioctet. Tous les octets suivants de cette suite sont dans l’intervalle 0x80 Ă  0xbf. Cela permet une resynchronisation aisĂ©e et rend l’encodage robuste face aux octets manquants.

-

Les caractĂšres UCS encodĂ©s en UTF-8 peuvent avoir jusqu’à 6 octets. NĂ©anmoins la norme Unicode ne prĂ©cise aucun caractĂšre au-delĂ  de 0x10ffff, ainsi les caractĂšres Unicode ne peuvent avoir que jusque 4 octets en UTF-8.

Encodage

Les suites d’octets suivantes sont utilisĂ©es pour reprĂ©senter un caractĂšre. Les suites utilisĂ©es dĂ©pendent du numĂ©ro de code UCS du caractĂšre :
0x00000000 - 0x0000007F :

0 xxxxxxx

0x00000080 - 0x000007FF :

110 xxxxx 10 xxxxxx

0x00000800 - 0x0000FFFF :

1110 xxxx 10 xxxxxx 10 xxxxxx

0x00010000 - 0x001FFFFF :

11110 xxx 10 xxxxxx 10 xxxxxx 10 xxxxxx

0x00200000 - 0x03FFFFFF :

111110 xx 10 xxxxxx 10 xxxxxx 10 xxxxxx 10 xxxxxx

0x04000000 - 0x7FFFFFFF :

1111110 x 10 xxxxxx 10 xxxxxx 10 xxxxxx 10 xxxxxx 10 xxxxxx

Les positions des bits xxx sont remplies avec les bits du numĂ©ro de code du caractĂšre en reprĂ©sentation binaire, bit de poids fort en premier (gros-boutiste). Seule la plus petite suite multioctet permettant de reprĂ©senter un numĂ©ro de code doit ĂȘtre utilisĂ©e.

Les codes UCS de valeur 0xd800–0xdfff (remplacements en UTF-16) ainsi que 0xfffe et 0xffff (non caractĂšres UCS) ne doivent pas apparaĂźtre dans un flux de donnĂ©es UTF-8. Aucun point au delĂ  de U+10FFFF ne doit ĂȘtre utilisĂ© selon la norme RFC 3629, ce qui limite les caractĂšres Ă  4 octets.

Exemple

Le caractÚre Unicode 0xA9 = 1010 1001 (le symbole copyright) est encodé en UTF-8 de la maniÚre suivante :

11000010 10101001 = 0xc2 0xa9

et le caractÚre 0x2260 = 0010 0010 0110 0000 (le symbole « différent de ») est encodé ainsi :

11100010 10001001 10100000 = 0xe2 0x89 0xa0

Notes applicatives

Les utilisateurs doivent sélectionner des paramÚtres régionaux UTF-8, par exemple en faisant

export LANG=fr_FR.UTF-8

afin d’activer la gestion de l’UTF-8 dans les applications.

Les applications qui doivent connaĂźtre l’encodage de caractĂšres utilisĂ© doivent toujours dĂ©finir la locale, en faisant par exemple

setlocale(LC_CTYPE, "")

et les programmeurs peuvent tester l’expression

strcmp(nl_langinfo(CODESET), "UTF-8") == 0

pour savoir si des paramĂštres rĂ©gionaux UTF-8 ont Ă©tĂ© sĂ©lectionnĂ©s, et si les entrĂ©es et sorties texte, les communications avec les terminaux, le contenu des fichiers textes, les noms de fichiers et les variables d’environnement sont encodĂ©s en UTF-8.

Les programmeurs habituĂ©s aux jeux de caractĂšres mono-octet comme US-ASCII ou ISO/IEC 8859 doivent savoir que deux hypothĂšses valables jusque lĂ  ne le sont plus dans les paramĂštres rĂ©gionaux UTF-8. D’abord, un octet seul ne correspond pas nĂ©cessairement Ă  un unique caractĂšre. Ensuite, comme les Ă©mulateurs de terminaux modernes en mode UTF-8 gĂšrent Ă©galement les caractĂšres double largeur du chinois, du japonais ou du corĂ©en et les caractĂšres combinĂ©s sans espacement, l’affichage d’un unique caractĂšre ne fait pas avancer obligatoirement le curseur d’une position comme c’était le cas en ASCII. Les fonctions de bibliothĂšques comme mbsrtowcs (3) et wcswidth (3) doivent ĂȘtre dĂ©sormais utilisĂ©es pour compter les caractĂšres et les positions de curseur.

La suite ESC officielle pour basculer d’un encodage ISO/IEC 2022 (comme utilisĂ© par exemple par les terminaux VT100) en UTF-8 est ESC % G (« \x1b%G »). La suite de retour depuis UTF-8 est ISO/IEC 2022 est ESC % @ (« \x1b%@ »). D’autres suites ISO/IEC 2022 (comme celle pour basculer entre les jeux G0 et G1) ne sont pas applicables en mode UTF-8.

Sécurité

Les normes Unicode et UCS demandent que le fabricant utilisant UTF-8 utilise la forme la plus courte possible, par exemple, produire une suite de deux octets avec un premier octet 0xc0 n’est pas conforme. Unicode 3.1 a ajoutĂ© la nĂ©cessitĂ© pour les programmes conformes de ne pas accepter les formes non minimales en entrĂ©e. Il s’agit de raisons de sĂ©curité : si une saisie est examinĂ©e pour des problĂšmes de sĂ©curitĂ©, un programme doit rechercher seulement la version ASCII de « /../ » ou « ; » ou NUL. De nombreuses maniĂšres non ASCII existent pour reprĂ©senter ces choses dans un encodage UTF-8 non minimal.

Normes

ISO/IEC 10646-1:2000, Unicode 3.1, RFC 3629, Plan 9.

VOIR AUSSI

locale (1), nl_langinfo (3), setlocale (3), charsets (7), unicode (7)

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Grégoire Scano <gregoire.scano@malloc.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .