CESU-8

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

Le CESU-8 (Compatibility Encoding Scheme for UTF-16: 8-Bit) est un codage de caractères variante d'UTF-8 décrit dans le document Unicode Technical Report #26[1] publié par le consortium Unicode. C'est un encodage d'Unicode sur 8 bits non normalisé, destiné à un usage interne et non destiné à, ni recommandé pour, des communications. Certains considèrent que sa place est davantage parmi les Technical Notes de l'organisation que dans les rapports techniques.

Le but principal de CESU-8 est de maintenir la même collation binaire qu'UTF-16 tout en gardant un codage 8 bits. Cependant, comme aucun traitement du caractère NUL n'est appliqué, la chaîne résultante ne peut être traitée comme une chaine terminée par un caractère NUL si la chaine d'origine contient le caractère U+0000.

Détails techniques[modifier | modifier le code]

CESU-8 s'apparente à l'UTF-8 modifié de Java (Modified UTF-8) mais privé du codage spécial du caractère NUL (U+0000). Il diffère seulement d'UTF-8 par sa représentation différente des caractères supplémentaires. Pour les caractères extérieurs au Plan multilingue de base (ceux générant une paire de seizets d'indirection en UTF-16), CESU-8 génère uniquement des séquences de 6 octets (c'est-à-dire deux fois 3 octets), là où UTF-8 génère une séquence de taille de 4 octets pour la valeur du caractère dans UTF-32. Pour ces caractères, CESU-8 prend les valeurs, situées dans U+D000..U+D7FF, de chacun des deux points de code de la paire de seizets, puis les code sur 6 octets, au lieu de coder le caractère représenté par la paire.

En dehors de ces caractères, assez peu courants, les flux UTF-8 et CESU-8 sont similaires et peuvent conduire à des détections erronées. C'est une des raisons pour lesquelles le consortium Unicode ne recommande pas son usage hors d'une mise en œuvre fermée. Le nom originel de CESU-8 était d'ailleurs UTF-8S, ce qui renforçait la confusion.


Dans le cas de données UTF-16 d'entrée invalides (c'est-à-dire un seizet de paire non couplé), bien que reproduire l'erreur dans la sortie serait fidèle, il est recommandé que le convertisseur notifie l'erreur et arrête le traitement[2].

Utilisation de CESU-8[modifier | modifier le code]

Dans la pratique, le seul environnement majeur faisant usage de CESU-8 est le SGBD relationnel Oracle, qui semble-t-il utilise désormais UTF-16 comme représentation interne des caractères. « L'UTF8 » (sans le trait d'union) d'Oracle, en réalité CESU-8, est un codec non-standard rejetant les séquences représentant un caractère hors BMP mais acceptant et générant celles usitées dans CESU-8. Le schéma d'encodage 8-bits actuellement recommandé en lieu et place de CESU-8 est AL32UTF8[3].

Il a aussi été rapporté que MySQL depuis la version 5 tolère les séquences CESU-8 quand UTF-8 est attendu[4].

Exemple[modifier | modifier le code]

Codage U+0045 U+0205 U+10400
UTF-8 45 C8 85 F0 90 90 80
UTF-16 0045 0205 D801 DC00
CESU-8 45 C8 85 ED A0 81 ED B0 80

Voir aussi[modifier | modifier le code]

Notes et références[modifier | modifier le code]

Liens externes[modifier | modifier le code]

Articles connexes[modifier | modifier le code]