UTF-EBCDIC

UTF-EBCDIC

UTF-EBCDIC est un codage de caractères utilisé pour représenter les caractères Unicode. Il est conçu pour être compatible avec lEBCDIC, de sorte que les applications EBCDIC existantes sur les mainframes puissent accepter et traiter les caractères sans grosse difficulté. Ses avantages pour les systèmes existants basés sur lEBCDIC sont similaires à ceux de lUTF-8 pour les systèmes basés sur lASCII. Les détails sur la transformation UTF-EBCDIC sont définis dans le Rapport technique Unicode n°16 (UTR #16).

Sommaire

Transformation d'un point de code Unicode en séquence UTF-EBCDIC

Transformation intermédiaire UTF-8-Mod

Pour produire la version encodée en UTF-EBCDIC d'une suite de points de code Unicode, une première transformation intermédiaire, similaire à lUTF-8 (désignée dans les spécifications comme UTF-8-Mod), est d'abord appliquée ; la principale différence entre cette transformation intermédiaire et lUTF-8 est quelle permet de représenter les points de code 0+0080 à U+009F (les caractères de contrôle C1) sur un seul octet, et de continuer à les utiliser en tant que codes de contrôle EBCDIC.

Pour y parvenir, le motif binaire 101xxxxx a été utilisé au lieu de 10xxxxxx pour représenter les octets finals dune séquence multi-octet représentant un seul point de code. Puisque cela ne laisse que 5 bits significatifs au lieu de 6 pour les octets finals, lUTF-EBCDIC produira souvent un résultat un peu plus long que celui obtenu avec lUTF-8, pour les mêmes données dentrée.

Le rapport technique n°16 stipule que le résultat de la première transformation UTF-8-Mod ne doit pas être utilisé pour les communications entre systèmes.

Permutation finale, compatible ISO-8859 vers EBCDIC

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

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 0xFA..0xFF, ainsi que les octets correspondants
    UTF-EBCDIC 0xEF et 0xFA...0xFE ne seront pas utilisés pour le codage dUnicode, mais uniquement pour
    les codets de lUCS-4 de lancienne norme ISO 10646:2000, étendu à 31 bits par point de code.

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

La transformation intermédiaire précédente laisse les données dans un format basé sur lISO 8859 (donc aussi compatible avec ISO 646 dont lASCII, et avec MIME), aussi une transformation réversible de permutation doctets est opérée sur les séquences doctets intermédiaires, afin de les rendre aussi proche que possible de lEBCDIC au moyen dune table de correspondance.

Toutefois cela nest possible que pour les positions invariantes de lEBCDIC, la table de permutation étant basée directement sur la transformation réversible de la version américaine de lISO 646 (communément appelée ASCII) en la version américaine de lEBCDIC : lUTF-EBCDIC ne définit ni nutilise aucune autre table de transformation pour les autres versions nationales de lISO 646 et de lEBCDIC.

Transformation inverse de lUTF-8 vers un point de code Unicode

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

  • La seconde étape sera dabord inversée par l'utilisation dune seconde table de permutation inverse (ci-dessous), pour produire des séquences doctets transformées en UTF-8-Mod : cette table est en fait une table de permutation des 256 valeurs possibles doctets, et est lexacte inverse de la table de la section précédente.
  • Puis la première étape sera inversée algorithmiquement.
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 (C0) (C1) (C2) (C3) (C4) 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 (E0) 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) (FE) (FF) 9F

Notes :

  • La table est arrangée pour faire correspondre exactement le codage EBCDIC équivalent au jeu de caractères latins de base de lUS-ASCII et aux caractères de contrôle, qui restent codés sur un seul octet :
    • sur fond rouge, les positions correspondent aux caractères de contrôle C0, commun aussi à tous les jeux compatibles avec lISO 646 ;
    • sur fond mauve, les positions correspondent aux caractères de contrôle C1, réservés par lEBCDIC les jeux de lISO 8859 ;
    • sur fond blanc, les positions invariantes des caractères graphiques de lISO 646 ;
    • sur fond jaune, les positions variantes des caractères graphiques de lISO 646, codées ici pour correspondre à la variante américaine US-ASCII de lISO 646 et la variante américaine de lEBCDIC.
  • Les autres positions sont toutes assignées à des caractères graphiques mais sont variantes selon les divers jeux EBCDIC (et sont parfois aussi utilisées pour coder des caractères de lUS-ASCII dans des variantes nationales de lEBCDIC. Ces positions sont utilisées pour coder en UTF-EBCDIC des caractères Unicode hors des caractères graphiques de lUS-ASCII et des caractères de contrôle C0 et C1 :
    • sur fond bleu, ces positions correspondent aux octets de queue, en nombre variable après toujours un unique octet préfixe ;
    • sur fond vert, ces positions codifient des octets de préfixe qui déterminent également, selon leur valeur, la longueur des séquences doctets utilisées, et sont normalement toujours suivies dun ou plusieurs octets de queue.
    • parmi ces dernières position, la table montre en italique, petits caractères et entre parenthèses les entrées correspondant aux octets de préfixes de séquences normalement non utilisées dans le codage normalisé pour les échanges interopérables entre systèmes :
    • 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 possibles (les seules qui soient intéropérables)  ;
    • les octets de séquences UTF-8-Mod 0xFA..0xFF, ainsi que les octets correspondants
      UTF-EBCDIC 0xEF et 0xFA...0xFE ne seront pas utilisés pour le codage dUnicode, mais uniquement pour
      les codets de lUCS-4 de lancienne norme ISO 10646:2000, étendu à 31 bits par point de code.

Détection des octets de tête dans les textes contenant des séquences UTF-EBCDIC

Drapeaux de longueur de séquence associés aux octets UTF-EBCDIC
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... 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1... 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2... 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
3... 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
4... 1 9 9 9 9 9 9 9 9 9 9 1 1 1 1 1
5... 1 9 9 9 9 9 9 9 9 9 1 1 1 1 1 1
6... 1 1 9 9 9 9 9 9 9 9 9 1 1 1 1 1
7... 9 9 9 9 (2) (2) (2) (2) (2) 1 1 1 1 1 1 1
8... 2 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2
9... 2 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2
A... 2 1 1 1 1 1 1 1 1 1 2 2 2 1 2 2
B... 2 2 2 2 2 2 2 (3) 3 3 3 3 3 1 3 3
C... 1 1 1 1 1 1 1 1 1 1 3 3 3 3 3 3
D... 1 1 1 1 1 1 1 1 1 1 3 3 4 4 4 4
E... 1 4 1 1 1 1 1 1 1 1 4 4 4 5 5 (5)
F... 1 1 1 1 1 1 1 1 1 1 (5) (6) (6) (7) (7) 0
Légende
0 Caractère de contrôle C0 représenté sur 1 octet
0 Caractère de contrôle C1 représenté sur 1 octet
1 Caractère graphique variant dans lISO 646 ou EBCDIC représenté sur 1 octet
1 Caractère graphique invariant de lISO 646 et EBCDIC représenté sur 1 octet
2 Premier octet dun point de code représenté sur 2 octets Voir note 1
3 Premier octet dun point de code représenté sur 3 octets
4 Premier octet dun point de code représenté sur 4 octets
5 Premier octet dun point de code représenté sur 5 octets
(5) Premier octet dun point de code représenté sur 5 octets Voir note 2
(6) Premier octet dun point de code représenté sur 6 octets
(7) Premier octet dun point de code représenté sur 7 octets
9 Octet de queue dun caractère codé sur plusieurs octets

Notes :

  1. 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.
  2. les octets de séquences UTF-8-Mod 0xFA..0xFF, ainsi que les octets correspondants
    UTF-EBCDIC 0xEF et 0xFA...0xFE ne seront pas utilisés pour le codage dUnicode, mais uniquement pour
    les codets de lUCS-4 de lancienne norme ISO 10646:2000, étendu à 31 bits par point de code.

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

Un défaut de lUTF-EBCDIC est quil nest pas simple de détecter, dans un texte codé en UTF-EBCDIC, quels octets délimitent chaque séquence.

En effet, ils sont dispersés parmi les 256 valeurs possibles, et la technique courante nécessite une table de correspondance permettant de savoir si un octet isolé représente un caractère (sauf pour les codes de contrôle C0 et C1 groupés entre 0x00 et 0x3F ou le caractère doblitération (DEL) codé 0xfF dans toutes les versions de lEBCDIC), ou si c'est un octet de queue ou un octet de tête indiquant la longueur effective de la séquence.

Cette table de correspondance est décrite dans le Rapport technique n°16 et contient des drapeaux (shadow flags) pour chaque valeur doctet possible. Son coût algorithmique et en termes de performance est non négligeable, et finalement similaire à celui de la table de permutation utilisée dans la deuxième étape de transformation depuis lUTF-EBCDIC. Son intérêt reste très limité en termes de performance, puisquil faut encore traiter spécialement les octets finals (tous identifiés par le même drapeau car on ne peut connaître leur position relative dans la séquence uniquement depuis leur seule valeur doctet) et procéder à des boucles supplémentaires de lecture et de test pour trouver le premier octet de la séquence.

Aussi, de nombreuses implémentations de lUTF-EBCDIC se contentent uniquement de la table de permutation inverse des octets UTF-EBCDIC vers UTF-8-Mod, et se passent de la table de drapeaux. Ils effectuent alors un simple test de valeur, sachant que dans UTF-8-Mod, les octets de queue obéissent tous à la condition très simple à tester (écrite ici en syntaxe des langages C, C++, Java ou C#:

(octet & 0xE0) == 0xA0

Utilisation de lUTF-EBCDIC

Généralement, cet encodage est rarement utilisé, même sur les mainframes basé sur lEBCDIC et pour lesquels cet encodage a été conçu. Les systèmes de mainframes IBM basés sur lEBCDIC, comme z/OS ou MVS, utilisent aujourdhui généralement lUTF-16 pour un support complet dUnicode : par exemple, DB2 UDB, COBOL, PL/I, Java et la boîte doutils IBM pour XML supportent tous lUTF-16 sur les systèmes IBM.

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 à lUTF-16, en représentant aussi les codes de demi-zone (surrogates) de lUTF-16. On obtient alors facilement un codet sur 32 bits, qui reste compatible avec lEBCDIC 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 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 (lutilisation 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 na aucune dénomimation officielle bien définie, même si certains lappellent 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 lUCS-2).

Son intérêt par rapport à la représentation intermédiaire UTF-8-Mod est quil devient possible déviter lutilisation de toute table pour savoir si un codet est le premier dune séquence ou lun des codets finals. En effet, les codets des demi-zones de lUTF-16 (qui permettent de savoir si un codet est le premier ou le second dune 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. Dautre part, cette représentation interne préserve aussi les valeurs de tous les caractères EBCDIC invariants.

Toutefois la transformation dune 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 lUTF-EBCDIC. Mais linverse 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 lUTF-EBCDIC.

Si le stockage nest 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 lEBCDIC, ou comme étape intermédiaire du calcul de clés de collation basées sur lEBCDIC ou lUTF-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 lUTF-16 (cest pourquoi les bases de données préfèrent indexer ou stocker les textes et clés de recherche en utilisant lUTF-16 plus compact).

Voir aussi

Liens internes

Liens externes


Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article UTF-EBCDIC de Wikipédia en français (auteurs)

Игры ⚽ Нужна курсовая?

Regardez d'autres dictionnaires:

  • Utf-ebcdic — Unicode Jeux de caractères UCS (ISO/CEI 10646) ISO 646, ASCII ISO 8859 1 WGL4 UniHan Équivalences normalisées NFC (précomposée) NFD (décomposée) NFKC (compatibilité) NFKD (compatibilité) Propriétés et algorithmes ISO 15924 …   Wikipédia en Français

  • UTF-EBCDIC — is a character encoding used to represent Unicode characters. It is meant to be EBCDIC friendly, so that legacy EBCDIC applications on mainframes may process the characters without much difficulty. Its advantages for existing EBCDIC based systems …   Wikipedia

  • UTF-EBCDIC — Unicode Kodierungen UTF 7 UTF 8 CESU 8 UTF 16 UTF 32 UTF EBCDIC SCSU Punycode GB 18030 Techniken BOM …   Deutsch Wikipedia

  • UTF-16 — est un codage des caractères définis par Unicode où chaque caractère est codé sur une suite de un ou deux mots de 16 bits. Le codage était défini dans le rapport technique 17 à la norme Unicode. Depuis, cette annexe est devenue obsolète car UTF… …   Wikipédia en Français

  • UTF-32 — est un codage des caractères définis par Unicode où chaque caractère est codé sur un mot de 32 bits. Le codage était défini dans l’annexe 19 à la norme Unicode. Depuis, l’annexe est devenue obsolète, car UTF 32 fait partie intégrante de la norme… …   Wikipédia en Français

  • UTF-7 — (7 bit Unicode Transformation Format) is a variable length character encoding that was proposed for representing Unicode text using a stream of ASCII characters. It was originally intended to provide a means of encoding Unicode text for use in… …   Wikipedia

  • Utf-16 — Unicode Jeux de caractères UCS (ISO/CEI 10646) ISO 646, ASCII ISO 8859 1 WGL4 UniHan Équivalences normalisées NFC (précomposée) NFD (décomposée) NFKC (compatibilité) NFKD (compatibilité) Propriétés et algorithmes ISO 15924 …   Wikipédia en Français

  • Utf-8 — Wikipédia …   Wikipédia en Français

  • Utf-32 — Unicode Jeux de caractères UCS (ISO/CEI 10646) ISO 646, ASCII ISO 8859 1 WGL4 UniHan Équivalences normalisées NFC (précomposée) NFD (décomposée) NFKC (compatibilité) NFKD (compatibilité) Propriétés et algorithmes ISO 15924 …   Wikipédia en Français

  • UTF — Unicode Kodierungen UTF 7 UTF 8 CESU 8 UTF 16 UTF 32 UTF EBCDIC SCSU Punycode GB 18030 Techniken BOM …   Deutsch Wikipedia

Share the article and excerpts

Direct link
https://fr-academic.com/dic.nsf/frwiki/1674335 Do a right-click on the link above
and select “Copy Link”