UTF-8
Un article de Wikipédia, l'encyclopédie libre.
Unicode |
---|
Jeux de caractères |
Équivalences normalisées
|
Propriétés et algorithmes
|
Codage
|
Autres transformations |
Applications d'échanges de données |
UTF-8 (UCS transformation format 8 bits) est un format de codage de caractères défini pour les caractères Unicode (UCS). Chaque caractère est codé sur une suite d'un à quatre octets. UTF-8 a été conçu pour être compatible avec certains logiciels originellement prévus pour traiter des caractères d'un seul octet.
UTF-8 est standardisé dans la RFC 3629 (UTF-8, a transformation format of ISO 10646). Le codage était aussi défini dans le rapport technique 17 de la norme Unicode. Il fait maintenant partie intégrante de la norme dans son chapitre 3 Conformance et est également approuvé par l’Organisation internationale de normalisation (ISO), l’Internet Engineering Task Force (IETF) et la plupart des organismes de normalisation nationaux.
L’IETF requiert qu’UTF-8 soit supporté par les protocoles de communication d’Internet échangeant du texte.
Sommaire |
[modifier] Description
Le numéro de chaque caractère est donné par le standard Unicode.
Les caractères de numéro 0 à 127 sont codés sur un octet dont le bit de poids fort est toujours nul.
Les caractères de numéro supérieur à 127 sont codés sur plusieurs octets. Dans ce cas, les bits de poids fort du premier octet forment une suite de 1 de longueur égale au nombre d'octets utilisés pour coder le caractère, les octets suivants ayant 10 comme bits de poids fort.
Représentation binaire | Signification |
---|---|
0xxxxxxx | 1 octet codant 1 à 7 bits |
110xxxxx 10xxxxxx | 2 octets codant 8 à 11 bits |
1110xxxx 10xxxxxx 10xxxxxx | 3 octets codant 12 à 16 bits |
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx | 4 octets codant 17 à 21 bits |
Ce principe pourrait être étendu jusqu'à six octets pour un caractère, mais UTF-8 pose la limite à quatre. Ce principe permet également d'utiliser plus d'octets que nécessaire pour coder un caractère, mais UTF-8 l'interdit.
Caractère | Numérotation décimal | Représentation binaire |
---|---|---|
A | 65 | 01000001 |
é | 233 | 11000011 10101001 |
€ | 8364 | 11100010 10000010 10101100 |
𝄞 | 119070 | 11110000 10011101 10000100 10011110 |
Dans toute chaîne de caractères UTF-8, on remarque que :
- tout octet de bit de poids fort nul code un caractère US-ASCII sur un octet ;
- tout octet de bits de poids fort valant 11 est le premier octet d'un caractère codé sur plusieurs octets ;
- tout octet de bits de poids fort valant 10 est à l'intérieur d'un caractère codé sur plusieurs octets.
[modifier] Avantages
- Universalité : ce codage permet de représenter les milliers de caractères d'Unicode.
- Compatibilité avec US-ASCII : un texte en US-ASCII est codé identiquement en UTF-8.
- Efficacité : pour les langues utilisant beaucoup les caractères US-ASCII, UTF-8 nécessite moins d'octets que l'UTF-16 ou l'UTF-32.
- Réutilisabilité : de nombreuses techniques de programmation informatique valables avec les caractères uniformément codés sur un octet le restent avec UTF-8, notamment :
- la manière de repérer la fin d'une chaîne de caractères C, car l'octet 00000000 dans une chaîne de caractère codés en UTF-8 est toujours le caractère nul.
- la manière de trouver une sous-chaîne est identique.
- Fiabilité : il s'agit d'un codage auto-synchronisant (en lisant un seul octet on sait si c'est le premier d'un caractère ou non).
- Une séquence décrivant un caractère n'apparaît jamais dans une séquence plus longue décrivant un autre caractère (cas de Shift-JIS).
- Il n'existe pas de code « d'échappement » changeant l'interprétation de la suite d'une séquence d'octets.
- Interopérabilité : du fait qu'un caractère est découpé en une suite d'octets (et non en mots de plusieurs octets), il n'y a pas de problème d'endianness. Problème qui apparaît avec les codages UTF-16 et UTF-32 par exemple.
[modifier] Inconvénients
Un caractère UTF-8 a une taille variable, ce qui rend certaines opérations sur les chaînes de caractères plus compliquées : le calcul du nombre de caractères ; le positionnement à une distance donnée dans un fichier texte et en règle générale toute opération nécessitant l'accès au caractère de position N dans une chaîne.
Les idéogrammes (kanji, par exemple) utilisent 3 octets en UTF-8 contre 2 octets en UTF-16. Les textes chinois, coréens et japonais y occupent donc plus de mémoire.
Un programme mal écrit peut accepter un certain nombre de représentations UTF-8 et les convertir comme un seul et même caractère. Ceci pose un problème de sécurité: en effet l'analyseur syntaxique peut avoir besoin de rejeter une certaine chaîne de caractères. Par exemple une séquence prohibée pourrait être « /../ » codée en ASCII « 2F 2E 2E 2F » (notation hexadécimale) mais le principe du codage UTF-8 permet de le coder aussi avec « 2F C0 AE 2E 2F ». Si l'analyseur syntaxique n'est pas soigneusement écrit pour rejeter aussi cette chaîne, une brèche potentielle de sécurité est ouverte. Cet exemple est tiré d'un cas réel de virus attaquant des serveurs HTTP du Web en 2001.
[modifier] Histoire
UTF-8 a été inventé par Kenneth Thompson lors d'un dîner avec Rob Pike aux alentours de septembre 1992. Il a été immédiatement utilisé dans le système d'exploitation Plan 9 sur lequel ils travaillaient. Une contrainte à résoudre était de coder les caractères nul et '/' comme en ASCII et qu'aucun octet codant un autre caractère n'ait le même code. Ainsi les systèmes d'exploitation UNIX pouvaient continuer à rechercher ces deux caractères dans une chaîne sans adaptation logicielle.
[modifier] Prise en charge
- Navigateurs Web : la prise en charge d'UTF-8 commença à être répandue à partir de 1998.
- Les anciens navigateurs Web ne supportant pas UTF-8 affichent tout de même correctement les 127 premiers caractères ASCII.
- Le navigateur Netscape Navigator supporte UTF-8 à partir de sa version 4 (juin 1997).
- Le navigateur Microsoft Internet Explorer supporte UTF-8 à partir de sa version 4 (octobre 1997) pour Microsoft Windows et pour Mac OS (janvier 1998).
- Les navigateurs basés sur le moteur de rendu Gecko (lancé en 1998) supportent l'UTF-8 : Mozilla, Mozilla Firefox, SeaMonkey etc.
- Le navigateur Opera supporte UTF-8 à partir de sa version 6 (novembre 2001).
- Le navigateur Konqueror supporte UTF-8.
- Le navigateur Safari sur Macintosh supporte UTF-8.
- Le navigateur OmniWeb sur Macintosh supporte UTF-8.
- Fichiers et noms de fichiers : de plus en plus courant sous les systèmes GNU/Linux, pas très bien supporté sous Windows.
[modifier] Voir aussi
[modifier] Blocs de caractères Unicode spéciaux contenant des non-caractères
- Table des caractères Unicode - Demi-zone haute d’indirection
- Table des caractères Unicode - Demi-zone basse d’indirection
- Table des caractères Unicode - Formes de présentation arabes (2e partie)
- Table des caractères Unicode - Fins de plans :
[modifier] Liens internes
- UTF-16, UTF-32
- Unicode, ISO/CEI 10646
- ISO 646, ASCII
- ISO 8859, ISO 8859-1
- Aide de Wikipédia sur les caractères spéciaux
[modifier] Liens externes
- (en) Conformance, The Unicode Standard 4.0, chapitre 3.2 pp. 60-61 et chapitre 3.4 pp. 64-65 et chapitre 3.9 pp. 73-81, août 2003, ISBN 0-321-18578-1.
- (en) RFC 3629, UTF-8, a transformation format of ISO 10646, novembre 2003 (standard, totalement compatible avec Unicode) ;
- (en) RFC 2279, UTF-8, a transformation format of ISO 10646, janvier 1998 (ancienne révision, obsolète) ;
- (en) RFC 2044, UTF-8, a transformation format of Unicode and ISO 10646, octobre 1996 (version initiale approuvée par l’ISO, obsolète) ;
- (en) Papier original sur UTF-8 de Rob Pike et Ken Thompson (informatif, obsolète).
- (en) RFC 2277, IETF policy on character sets and languages, janvier 1998.
- (en) Histoire de la création d'UTF-8, par Rob Pike.
|
|