UTF-8

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 de un à quatre octets.

UTF-8 est standardisé dans la RFC 3629 (UTF-8, a transformation format of ISO 10646). Le codage est aussi défini dans le rapport technique 17 de la norme. L'IETF requiert qu'UTF-8 soit supporté par les protocoles de communication d'Internet échangeant du texte.

Sommaire

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. 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 suivant ayant 10 comme bits de poids fort.

codage UTF-8
0vvvvvvv 1 octet codant 1 à 7 bits
110vvvvv 10vvvvvv 2 octets codant 8 à 11 bits
1110vvvv 10vvvvvv 10vvvvvv 3 octets codant 12 à 16 bits
11110vvv 10vvvvvv 10vvvvvv 10vvvvvv 4 octets codant 17 à 21 bits

Dans toute suite de caractères UTF-8, on remarque que :

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.

Exemples pratiques

caractère code numérique octets UTF-8
A 65 01000001
é 233 11000011 10101001
8364 11100010 10000010 10101100
𝄞 119070 11110000 10011101 10000100 10011110

Avantages

Inconvénients

Un caractère UTF-8 a une taille variable, ce qui rend certaines opérations sur les chaînes plus compliquées : calcul du nombre de caractères, 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 place.

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 (notation hexadécimal) « 2F 2E 2E 2F » 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.

Histoire

UTF-8 a été inventé par Ken 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 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.

Prise en charge

Voir aussi

Liens internes

[ UTF-16 | UTF-32 | Unicode | ASCII | ISO 8859-1 | Wikipédia:Caractères spéciaux ]

Liens externes

See also: UTF-8, 1992, 1996, 1997, 1998, 2001, 2003, ASCII, American Standard Code for Information Interchange, Anglais