- EBCDIC
-
Extended Binary Coded Decimal Interchange Code
L'Extended Binary Coded Decimal Interchange Code (EBCDIC) est un mode de codage des caractères sur 8 bits créé par IBM à l'époque des cartes perforées. Il existe au moins 6 versions différentes bien documentées (et de nombreuses variantes parfois créées par des concurrents d’IBM), incompatibles entre elles. Ce mode de codage a été critiqué pour cette raison, mais aussi parce que certains caractères de ponctuation ne sont pas disponibles dans certaines versions. Ces disparités ont parfois été interprétées comme un moyen pour IBM de conserver ses clients captifs.
EBCDIC est encore utilisé dans les systèmes AS/400 d’IBM ainsi que sur les mainframes sous MVS, VM ou DOS/VSE.
Sommaire
Historique
La disposition apparemment « étrange » du codage EBCDIC est historique et provient des anciens lecteurs de bandes et cartes perforées, qui devaient pouvoir être lues et percées manuellement par un humain en utilisant le système décimal plus mnémotechnique (et il était lui-même dérivé de l’ancien jeu de caractère télégraphique sur 5 bits).
Les bits de poids fort sont apparus après et ont permis de coder dans une colonne supplémentaire de perforation les distinctions entre chiffres et lettres, ou entre minuscules et majuscules. Le jeu était conçu pour qu’à chaque caractère corresponde aussi au moins un trou, afin de permettre la synchronisation des lecteurs de bandes perforées, c’est pourquoi la colonne 0 était à l’origine inutilisée pour les lettres, les chiffres ayant un trou dédié supplémentaire correspondant à un bit de poids fort.
Le jeu EBCDIC à l’origine était bien un jeu sur 7 bits, le huitième étant alors uniquement utilisé sur les cartes perforées pour indiquer que la colonne de perforation était bien occupée par un caractère codé (c’est pourquoi les principaux codes EBCDIC occupent la seconde moitié de la table).
De même, les ponctuations étaient codées aussi de façon visuelle et mnémotechnique, et pouvaient facilement être distinguées des chiffres et lettres par le fait qu’elles n'avait aucun trou dans les positions binaires correspondant aux marques de chiffres ou de lettres.
L’absence de toute perforation dans une colonne de perforations était interprétée comme du bourrage non signifiant, lié à la technologie employée (ce code en début de table correspond aujourd’hui au caractère de commande C0 “NUL”). De même, on pouvait corriger une erreur manuelle de perforation en perforant toutes les positions d’une colonne, et donc la dernière position est aussi un caractère de bourrage non signifiant (ce code en fin de table correspond aujourd’hui au caractère de commande C1 “APC”, fonction plutôt dévolue au caractère de commande C0 “DEL” de l’ISO 646 et de l’ASCII mais dont l’usage est plus ambigu).
L’EBCDIC est donc le fruit d’une évolution historique bien plus ancienne (développée de longue date par IBM en continuité avec les anciens systèmes télégraphiques) que l’ASCII (plus pratique à manipuler dans les programmes) qui l’a remplacé ensuite pratiquement partout et a donné ensuite lieu à une normalisation dans l’ISO 646.
Les bandes et cartes perforées ont cependant continué à être utilisées avec l’EBCDIC jusque vers les années 1990, par exemple en Turquie pour les échanges de données militaires alors que les problèmes de compatibilité des systèmes d’enregistrement magnétiques ou des réseaux étaient encore loin d’être tous résolus.
Le succès des normes de communication entre systèmes hétérogènes (notamment TCP/IP et l’Internet, ainsi que les systèmes de cryptographie pour la transmission sécurisée et moins coûteuse via des réseaux publics) a mis fin à l’intéret de l’EBCDIC pour tout nouveau développement, et les nombreuses versions nationales de l’EBCDIC ont également de moins en moins d’intérêt depuis l’apparition de l’UTF-EBCDIC.
Exemple de codage
Ce tableau représente le codage d’une variante d’EBCDIC compatible avec l’ISO 8859-1. Les caractères codés de 0x00 à 0x3F ainsi que 0xFF sont des caractères de contrôle, 0x40 est l’espace, 0x41 est l’espace insécable. Le caractère codé en 0x54 est le tiret de césure visible uniquement en fin de ligne.
Cette variante est compatible, octet par octet, avec l’UTF-EBCDIC qui utilise les positions variantes colorées en vert pour coder les caractères Unicode (hors de l’ASCII et des codes de contrôle) sous forme de séquences d’octets.
Chaque variante nationale ou internationale de l’EBCDIC est codée d’après cette table (cependant des permutations sont possibles entre deux CCSID pour les mêmes caractères). Toutes les variantes de l’EBCDIC ne codent pas les lettres minuscules latines de base, au contraire des jeux de caractères basés sur l’ISO 646 ou ISO 8859.
D’autre part certaines variantes nationales de l’ISO 646 (ou autres jeux de caractères compatibles avec cette norme) contiennent des positions variantes supplémentaires, invariantes dans les jeux de caractères basés sur l’EBCDIC.
Enfin, les positions 0x21 et 0x22 de l’EBCDIC sont variantes — la plupart codent le point d’exclamation et le guillemet anglais (double quote) — au contraire des caractères correspondants des variantes nationales de l’ISO 646.
Sur les systèmes EBCDIC, le saut de ligne est normalement codé avec le caractère de commande C1 “NEL” (U+0085 en Unicode, ou 0x25 dans toutes les variantes standard EBCDIC) et non avec les caractères de commande C0 “CR” et/ou “LF” de l’ISO 646 et de l’ASCII (U+000D et/ou U+000A, c’est-à-dire 0x0D et/ou 0x15 en EBCDIC, où ces commandes ont une fonction bien définie et unique de gestion de position du curseur sur un terminal, ou bien permettent de distinguer les sauts de lignes forcés dans un même paragraphe, ou encore permettaient d’afficher une ligne en surimpression pour produire des caractères gras, soulignés, ou accentués supplémentaires).
Jeu de caractères EBCDIC (variante compatible avec l’UTF-EBCDIC). Quartet
hautQuartet 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... NUL
0000SOH
0001STX
0002ETX
0003ST
009CHT
0009SSA
0086DEL
007FEPA
0097RI
008DSS2
008EVT
000BFF
000CCR
000DSO
000ESI
000F1... DLE
0010DC1
0011DC2
0012DC3
0013OSC
009DLF
000ABS
0008ESA
0087CAN
0018EM
0019PU2
0092SS3
008FFS
001CGS
001DRS
001EUS
001F2... PAD
0080HOP
0081BPH
0082NBH
0083IND
0084NEL
0085ETB
0017ESC
001BHTS
0088HTJ
0089VTS
008APLD
008BPLU
008CENQ
0005ACK
0006BEL
00073... DCS
0090PU1
0091SYN
0016STS
0093CCH
0094MW
0095SPA
0096EOT
0004SOS
0098SGCI
0099SCI
009ACSI
009BDC4
0014NAK
0015PM
009ESUB
001A4... SP
0020NBSP
00A0¡
00A1¢
00A2£
00A3¤
00A4¥
00A5¦
00A6§
00A7¨
00A8©
00A9.
002E<
003C(
0028+
002B|
007C5... &
0026ª
00AA«
00AB¬
00ACSHY
00AD®
00AE¯
00AF°
00B0±
00B1²
00B2!
0021$
0024'*
002A)
0029;
003B^
005E6... -
002D/
002F³
00B3´
00B4µ
00B5¶
00B6·
00B7¸
00B8¹
00B9º
00BA»
00BB,
002C%
0025_
005F>
003E?
003F7... ¼
00BC½
00BD¾
00BE¿
00BFÀ
00C0Á
00C1Â
00C2Ã
00C3Ä
00C4`
0060:
003A#
0023@
0040'
0027=
003D"
00228... Å
00C5a
0061b
0062c
0063d
0064e
0065f
0066g
0067h
0068i
0069Æ
00C6Ç
00C7È
00C8É
00C9Ê
00CAË
00CB9... Ì
00CCj
006Ak
006Bl
006Cm
006Dn
006Eo
006Fp
0070q
0071r
0072Í
00CDÎ
00CEÏ
00CFÐ
00D0Ñ
00D1Ò
00D2A... Ó
00D3~
007Es
0073t
0074u
0075v
0076w
0077x
0078y
0079z
007AÔ
00D4Õ
00D5Ö
00D6[
005B×
00D7Ø
00D8B... Ù
00D9Ú
00DAÛ
00DBÜ
00DCÝ
00DDÞ
00DEß
00DFà
00E0á
00E1â
00E2ã
00E3ä
00E4å
00E5]
005Dæ
00E6ç
00E7C... {
007BA
0041B
0042C
0043D
0044E
0045F
0046G
0047H
0048I
0049è
00E8é
00E9ê
00EAë
00EBì
00ECí
00EDD... }
007DJ
004AK
004BL
004CM
004DN
004EO
004FP
0050Q
0051R
0052î
00EEï
00EFð
00F0ñ
00F1ò
00F2ó
00F3E... \
005Cô
00F4S
0053T
0054U
0055V
0056W
0057X
0058Y
0059Z
005Aõ
00F5ö
00F6÷
00F7ø
00F8ù
00F9ú
00FAF... 0
00301
00312
00323
00334
00345
00356
00367
00378
00389
0039û
00FBü
00FCý
00FDþ
00FEÿ
00FFAPC
009FNotes :
- Les positions variantes de l’EBCDIC indiquent en italique le point de code Unicode correspondant uniquement à cette variante ;
- Les caractères de contrôle de l’EBCDIC sont indiqués sur fond rouge (commandes C0) ou mauve (commandes C1).
- Les caractères variants des différentes versions correspondantes de l’ISO 646 sont affichés sur fond jaune (le caractère affiché est celui de l’EBCDIC CCSID 500 ou de l’ASCII).
- Le caractère “double quote” U+0022 (codé 0x7F dans la plupart des variantes de l’EBCDIC) n’est pas variant dans les jeux de caractères compatibles ISO 646, mais varie dans la version turque de l’EBCDIC.
- Les minuscules latines U+0061 à U+007A (codées 0x81..0x89,0x91..0x99,0xA2..0xA9 dans la plupart des variantes de l’EBCDIC) ne sont pas variants dans les jeux de caractères compatibles ISO 646, mais varient dans les versions japonaises et cyrilliques de l’EBCDIC.
- Les caractères variants des différentes versions étendues de l’EBCDIC sont affichés sur fond vert (le caractère affiché est celui de l’UTF-EBCDIC interprété comme caractère l’ISO 8859-1). Certains caractères étaient différents dans la version initiale de l’EBCDIC qui y plaçait des symboles spéciaux. Les variantes CCSID 037 et 500 les plus connues de l’EBCDIC utilisent une assignation différente.
Transcodage de l’ISO 8859-1 vers l’EBCDIC
La table suivante permet de transcoder l’ASCII (caractères Unicode U+0000 à U+007F) et le jeu de commandes C1 (caractères Unicode U+0080 à U+009F) en EBCDIC. Les caractères de l’extensions ISO 8859 (en verts) sont indiqués ici dans l’ordre compatible avec l’UTF-EBCDIC, mais cette assignation ne correspond pas à une variante nationale particulière de l’EBCDIC.
Cette table est l’inverse de la table précédente et est compatible octet par octet avec la seconde phase (de permutation des valeurs d’octets) de l’UTF-EBCDIC.
Ensembles, ces deux tables permettent d’adapter facilement n’importe quel jeu de caractère compatible ISO 646 ou ISO 8859 pour des traitements sur des systèmes EBCDIC standards. Par contre, pour adapter à une version précise d’un jeu EBCDIC (et faire reconnaître exactement les caractères non ASCII), il faudra substituer les positions marquées en vert dans les deux tables, en fonction de leur assignation réelle dans les variantes nationales de jeux EBCDIC correspondants, voire substituer les lettres minuscules latines remplacées dans certaines versions obsolètes de certains jeux EBCDIC (jeu EBCDIC japonais ou cyrillique, sauf les jeux EBCDIC russes qui unifient avec le même code EBCDIC certaines lettres cyrilliques et latines comme le A, d’apparences identiques dans les deux écritures).
Le détail des assignations de ces positions (marquées ici en vert dans les deux tables) dans les variantes nationales de l’EBCDIC est référencé sur le site IBM mentionné dans les liens externes. Notamment, la variante encore la plus utilisée est l’EBCDIC CCSID 500 (version internationale du jeu Latin n°1 dont le jeu est très proche de celui de l’ISO 8859-1, mais avec quelques différences, et triée différemment des tables présentées ici).
Transcodage de l’ISO-8859-1 vers EBCDIC (variante compatible avec l’UTF-EBCDIC). Colonne
UnicodeQuartet bas Unicode (toutes les valeurs sont en hexadécimal) ...0 ...1 ...2 ...3 ...4 ...5 ...6 ...7 ...8 ...9 ...A ...B ...C ...D ...E ...F 000... NUL
00SOH
01STX
02ETX
03EOT
37ENQ
2DACK
2EBEL
2FBS
16HT
05LF
15VT
0BFF
0CCR
0DSO
0ESI
0F001... DLE
10DC1
11DC2
12DC3
13DC4
3CNAK
3DSYN
32ETB
26CAN
18EM
19SUB
3FESC
27FS
1CGS
1DRS
1EUS
1F002... SP
40!
5A"
7F#
7B$
5B%
6C&
50'
7D(
4D)
5D*
5C+
4E,
6B-
60.
4B/
61003... 0
00F01
00F12
00F23
00F34
00F45
00F56
00F67
00F78
00F89
00F9:
7A;
5E<
4C=
7E>
6E?
6F004... @
7CA
C1B
C2C
C3D
C4E
C5F
C6G
C7H
C8I
C9J
D1K
D2L
D3M
D4N
D5O
D6005... P
D7Q
D8R
D9S
E2T
E3U
E4V
E5W
E6X
E7Y
E8Z
E9[
AD\
E0]
BD^
5F_
6D006... `
79a
81b
82c
83d
84e
85f
86g
87h
88i
89j
91k
92l
93m
94n
95o
96007... p
97q
98r
99s
A2t
A3u
A4v
A5w
A6x
A7y
A8z
A9{
C0|
4F}
D0~
A1DEL
07008... PAD
20HOP
21BPH
22NBH
23IND
24NEL
25SSA
06ESA
17HTS
28HTJ
29VTS
2APLD
2BPLU
2CRI
09SS2
0ASS3
1B009... DCS
30PU1
31PU2
1ASTS
33CCH
34MW
35SPA
36EPA
08SOS
38SGCI
39SCI
3ACSI
3BST
04OSC
14PM
3EAPC
FF00A... NBSP
41¡
42¢
43£
43¤
45¥
46¦
47§
48¨
49©
4Aª
51«
52¬
53SHY
54®
55¯
5600B... °
57±
58²
59³
62´
63µ
64¶
65·
66¸
67¹
68º
69»
6A¼
70½
71¾
72¿
7300C... À
74Á
75Â
76Ã
77Ä
78Å
80Æ
8AÇ
8BÈ
8CÉ
8DÊ
8EË
8FÌ
90Í
9AÎ
9BÏ
9C00D... Ð
9DÑ
9EÒ
9FÓ
A0Ô
AAÕ
ABÖ
AC×
AEØ
AFÙ
B0Ú
B1Û
B2Ü
B3Ý
B4Þ
B5ß
B600E... à
B7á
B8â
B9ã
BAä
BBå
BCæ
BEç
BFè
CAé
CBê
CCë
CDì
CEí
CFî
DAï
DB00F... ð
DCñ
DDò
DEó
DFô
E1õ
EAö
EB÷
ECø
EDù
EEú
EFû
FAü
FBý
FCþ
FDÿ
FENotes :
- Les positions variantes de l’EBCDIC indiquent en italique le code EBCDIC correspondant uniquement à cette variante ;
- Les caractères de contrôle de l’EBCDIC sont indiqués sur fond rouge (commandes C0) ou mauve (commandes C1).
- Les caractères variants des différentes versions correspondantes de l’ISO 646 sont affichés sur fond jaune (le caractère affiché est celui de l’EBCDIC CCSID 500 ou de l’ASCII).
- Le caractère “double quote” U+0022 (codé 0x7F dans la plupart des variantes de l’EBCDIC) n’est pas variant dans les jeux de caractères compatibles ISO 646, mais varie dans la version turque de l’EBCDIC.
- Les minuscules latines U+0061 à U+007A (codées 0x81..0x89,0x91..0x99,0xA2..0xA9 dans la plupart des variantes de l’EBCDIC) ne sont pas variants dans les jeux de caractères compatibles ISO 646, mais varient dans les versions japonaises et cyrilliques de l’EBCDIC.
- Les caractères variants des différentes versions étendues de l’EBCDIC sont affichés sur fond vert (le caractère affiché est celui de l’UTF-EBCDIC interprété comme caractère l’ISO 8859-1). Certains caractères étaient différents dans la version initiale de l’EBCDIC qui y plaçait des symboles spéciaux. Les variantes CCSID 037 et 500 les plus connues de l’EBCDIC utilisent une assignation différente.
Voir aussi
Article connexe
- ISO 646, ASCII, ISO 8859
- EBCDIC-codepages avec Latin-1-charset
- EBCDIC-codepage 297 ( France )
- UTF-EBCDIC
Lien externe
- Tables EBCDIC sur le site IBM
- http://home.arcor.de/wzwz.de/wiki/ebcdic/cc_fr.htm // EBCDIC-codepages avec Latin-1-charset (JavaScript)
- http://home.arcor.de/wzwz.de/wiki/ebcdic/aa70_all_pages.zip // ZIPped version
- http://homepages.cwi.nl/~dik/english/codes/stand.html jeux de caractères 7 ou 8 bits comparés.
- Portail de l’informatique
Catégories : Codage des données | EBCDIC
Wikimedia Foundation. 2010.