CESU-8
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
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+D800..U+DFFF, 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
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. On peut obtenir la norme UTF-8 en utilisant le jeu de caractères « AL32UTF8 » (depuis Oracle version 9.0).
Il a aussi été rapporté que MySQL depuis la version 5 tolère les séquences CESU-8 quand UTF-8 est attendu[3].
Exemple
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
Notes et références
- (en) Unicode Technical Report #26: Compatibility Encoding Scheme for UTF-16: 8-Bit (CESU-8) (html).
- (en) Q: How do I convert an unpaired UTF-16 surrogate to UTF-8? unicode.org, récupéré le 26 septembre 2006.
- (en) Re: Unicode high characters versus MySQL 5 sur la liste de diffusion Wikitech-l.