UTF-EBCDIC - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Transformation inverse de l’UTF-8 vers un point de code Unicode

Correspondance des octets UTF-EBCDIC en octets UTF-8-Mod
Quartet
haut
Quartet bas (toutes les valeurs sont en hexadécimal)
...0 ...1 ...2 ...3 ...4 ...5 ...6 ...7 ...8 ...9 ...A ...B ...C ...D ...E ...F
0... 00 01 02 03 9C 09 86 7F 97 8D 8E 0B 0C 0D 0E 0F
1... 10 11 12 13 9D 0A 08 87 18 19 92 8F 1C 1D 1E 1F
2... 80 81 82 83 84 85 17 1B 88 89 8A 8B 8C 05 06 07
3... 90 91 16 93 94 95 96 04 98 99 9A 9B 14 15 9E 1A
4... 20 A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 2E 3C 28 2B 7C
5... 26 AA AB AC AD AE AF B0 B1 B2 21 24 2A 29 3B 5E
6... 2D 2F B3 B4 B5 B6 B7 B8 B9 BA BB 2C 25 5F 3E 3F
7... BC BD BE BF 60 3A 23 40 27 3D 22
8... C5 61 62 63 64 65 66 67 68 69 C6 C7 C8 C9 CA CB
9... CC 6A 6B 6C 6D 6E 6F 70 71 72 CD CE CF D0 D1 D2
A... D3 7E 73 74 75 76 77 78 79 7A D4 D5 D6 5B D7 D8
B... D9 DA DB DC DD DE DF E1 E2 E3 E4 E5 5D E6 E7
C... 7B 41 42 43 44 45 46 47 48 49 E8 E9 EA EB EC ED
D... 7D 4A 4B 4C 4D 4E 4F 50 51 52 EE EF F0 F1 F2 F3
E... 5C F4 53 54 55 56 57 58 59 5A F5 F6 F7 F8 F9 FA
F... 30 31 32 33 34 35 36 37 38 39 FB FC FD 9F

Notes :

  • les octets de séquences UTF-8-Mod 0xC0..0xC4 et 0xE0, ainsi que les octets correspondants
    UTF-EBCDIC 0x74...0x78 et 0xB7 ne seront pas utilisés avec les séquences les plus courtes.
  • les octets de séquences UTF-8-Mod 0xFE..0xFF, ainsi que les octets correspondants
    UTF-EBCDIC 0xFD...0xFE ne seront pas utilisés pour le codage d’Unicode, mais uniquement pour
    les codets de l’UCS-4 de l’ancienne norme ISO 10646:2000, étendu à 31 bits par point de code.

La table montre en italique et petits caractères les entrées correspondantes.

Ces deux étapes précédentes peuvent être facilement inversées pour retrouver les points de code Unicode.

  • La seconde étape sera d'abord inversée par l'utilisation d’une seconde table de permutation inverse, pour produire des séquences d'octets transformées en UTF-8-Mod.
  • Puis la première étape sera inversée algorithmiquement.

Extension sur 32 bits à usage interne

La transformation UTF-EBCDIC peut être parfois étendue pour faciliter les traitements internes, en considérant que les séquences UTF-EBCDIC limitées à 4 octets peuvent coder tout point de code jusqu’à la fin du plan supplémentaire n°3 (c'est àdire jusqu’à U+3FFFF). Ainsi, il est possible de représenter (de façon interne uniquement) tous les points de code du plan multilingue de base sous une forme comparable à l’UTF-16, en représentant aussi les codes de demi-zone (surrogates) de l’UTF-16. On obtient alors facilement un codet sur 32 bits, qui reste compatible avec l’EBCDIC pour chaque point de code du BMP, et deux codets de 32 bits chacun pour représenter les points de code des plans supplémentaires.

Cette représentation alternative ne doit pas être utilisée dans les échanges entre systèmes, mais uniquement pour faciliter et optimiser les interfaces de programmation interne où les caractères EBCDIC sont échangés dans des codets (en mémoire) de 32 bits, ce qui limite alors le nombre de tests de valeurs et évite le recours systématique aux tables de permutation pour tester les étendues de caractères lors de traitements complexes ou volumineux de textes (l’utilisation systématique des tables de permutation est une opération coûteuse en termes de performance, si on la compare à un simple test basé sur les intervalles de valeurs des codets de 32 bits).

Actuellement cette représentation interne n’a aucune dénomimation officielle bien définie, même si certains l’appellent UTF-16-Mod ou UTF-16-EBCDIC (dénominations impropres car cette transformation crée des codets de 32 bits représentant chacun un codet de 16 bits de l’UCS-2).

Son intérêt par rapport à la représentation intermédiaire UTF-8-Mod est qu’il devient possible d’éviter l’utilisation de toute table pour savoir si un codet est le premier d’une séquence ou l’un des codets finals. En effet, les codets des demi-zones de l’UTF-16 (qui permettent de savoir si un codet est le premier ou le second d’une séquence) sont représentés aussi dans des intervalles contigus de codets sur 32 bits dans cette représentation, ce qui facilite leur détection par un test arithmétique uniquement et qui permet de savoir si un codet 32-bit est le premier ou le second représentant un point de code supplémentaire, ou si le codet de 32 bits est isolé et représente un point de code du BMP. D’autre part, cette représentation interne préserve aussi les valeurs de tous les caractères EBCDIC invariants.

Toutefois la transformation d’une séquence UTF-EBCDIC dans cette représentation interne sur 32 bits nécessite de savoir quels octets délimitent une séquence UTF-EBCDIC, ce qui nécessite une table de drapeaux (appelée show flags) pour interpréter correctement l’UTF-EBCDIC. Mais l’inverse est immédiat et ne nécessite aucune table (la transformation inverse sefaisant par simple décalages binaires et tests desvaleurs nulles poursavoir si un ou plusieurs octets doivent être émis dans l’UTF-EBCDIC.

Si le stockage n’est pas important et ne concerne que des quantités limitées de caractères, cette représentation sera plus rapide (par exemple comme étape intermédiaire pour transformer un texte UTF-EBCDIC en majuscules quand on dispose de tables ou d'algorithmes basées sur l’EBCDIC, ou comme étape intermédiaire du calcul de clés de collation basées sur l’EBCDIC ou l’UTF-EBCDIC, ou en interne dans des analyseurs lexicaux traitant des textes codés en EBCDIC ou UTF-EBCDIC).

Par contre, son principal défaut est évidemment sa taille, double de l’UTF-16 (c’est pourquoi les bases de données préfèrent indexer ou stocker les textes et clés de recherche en utilisant l’UTF-16 plus compact).

Page générée en 0.088 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales
Version anglaise | Version allemande | Version espagnole | Version portugaise