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 (aujourd'hui z/OS), VM ou DOS/VSE.
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 contrĂŽle 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 contrĂŽle C0 âDELâ de lâISO/CEI 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Ă©rĂȘt 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/CEI 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/CEI 646 ou ISO/CEI 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 0x5A et 0x7F de lâEBCDIC sont variantes â la plupart des variantes EBCDIC y codent respectivement le point dâexclamation et le guillemet anglais (double quote) â au contraire des caractĂšres correspondants des variantes nationales de lâISO/CEI 646 aux positions respectives 0x21 et 0x22.
Sur les systĂšmes EBCDIC, le saut de ligne est normalement codĂ© avec le caractĂšre de contrĂŽle C1 âNELâ (U+0085 en Unicode, ou 0x25 dans toutes les variantes standard EBCDIC) et non avec les caractĂšres de contrĂŽle 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).
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... | NUL 0000 |
SOH 0001 |
STX 0002 |
ETX 0003 |
ST 009C |
HT 0009 |
SSA 0086 |
DEL 007F |
EPA 0097 |
RI 008D |
SS2 008E |
VT 000B |
FF 000C |
CR 000D |
SO 000E |
SI 000F |
1... | DLE 0010 |
DC1 0011 |
DC2 0012 |
DC3 0013 |
OSC 009D |
LF 000A |
BS 0008 |
ESA 0087 |
CAN 0018 |
EM 0019 |
PU2 0092 |
SS3 008F |
FS 001C |
GS 001D |
RS 001E |
US 001F |
2... | PAD 0080 |
HOP 0081 |
BPH 0082 |
NBH 0083 |
IND 0084 |
NEL 0085 |
ETB 0017 |
ESC 001B |
HTS 0088 |
HTJ 0089 |
VTS 008A |
PLD 008B |
PLU 008C |
ENQ 0005 |
ACK 0006 |
BEL 0007 |
3... | DCS 0090 |
PU1 0091 |
SYN 0016 |
STS 0093 |
CCH 0094 |
MW 0095 |
SPA 0096 |
EOT 0004 |
SOS 0098 |
SGCI 0099 |
SCI 009A |
CSI 009B |
DC4 0014 |
NAK 0015 |
PM 009E |
SUB 001A |
4... | SP 0020 |
NBSP 00A0 |
ÂĄ 00A1 |
Âą 00A2 |
ÂŁ 00A3 |
€ 00A4 |
„ 00A5 |
Š 00A6 |
§ 00A7 |
š 00A8 |
© 00A9 |
. 002E |
< 003C |
( 0028 |
+ 002B |
| 007C |
5... | & 0026 |
ÂȘ 00AA |
« 00AB |
ÂŹ 00AC |
SHY 00AD |
Âź 00AE |
ÂŻ 00AF |
° 00B0 |
± 00B1 |
ÂČ 00B2 |
! 0021 |
$ 0024 |
* 002A |
) 0029 |
; 003B |
^ 005E |
6... | - 002D |
/ 002F |
Âł 00B3 |
ÂŽ 00B4 |
” 00B5 |
¶ 00B6 |
· 00B7 |
ž 00B8 |
Âč 00B9 |
Âș 00BA |
» 00BB |
, 002C |
% 0025 |
_ 005F |
> 003E |
? 003F |
7... | Œ 00BC |
œ 00BD |
Ÿ 00BE |
Âż 00BF |
Ă 00C0 |
Ă 00C1 |
Ă 00C2 |
Ă 00C3 |
Ă 00C4 |
` 0060 |
: 003A |
# 0023 |
@ 0040 |
' 0027 |
= 003D |
" 0022 |
8... | Ă
00C5 |
a 0061 |
b 0062 |
c 0063 |
d 0064 |
e 0065 |
f 0066 |
g 0067 |
h 0068 |
i 0069 |
Ă 00C6 |
Ă 00C7 |
Ă 00C8 |
Ă 00C9 |
Ă 00CA |
Ă 00CB |
9... | Ă 00CC |
j 006A |
k 006B |
l 006C |
m 006D |
n 006E |
o 006F |
p 0070 |
q 0071 |
r 0072 |
Ă 00CD |
Ă 00CE |
Ă 00CF |
Ă 00D0 |
Ă 00D1 |
Ă 00D2 |
A... | Ă 00D3 |
~ 007E |
s 0073 |
t 0074 |
u 0075 |
v 0076 |
w 0077 |
x 0078 |
y 0079 |
z 007A |
Ă 00D4 |
Ă 00D5 |
Ă 00D6 |
[ 005B |
Ă 00D7 |
Ă 00D8 |
B... | Ă 00D9 |
Ă 00DA |
Ă 00DB |
Ă 00DC |
Ă 00DD |
Ă 00DE |
Ă 00DF |
Ă 00E0 |
ĂĄ 00E1 |
Ăą 00E2 |
ĂŁ 00E3 |
Ă€ 00E4 |
Ă„ 00E5 |
] 005D |
ĂŠ 00E6 |
ç 00E7 |
C... | { 007B |
A 0041 |
B 0042 |
C 0043 |
D 0044 |
E 0045 |
F 0046 |
G 0047 |
H 0048 |
I 0049 |
Ăš 00E8 |
Ă© 00E9 |
ĂȘ 00EA |
Ă« 00EB |
ĂŹ 00EC |
Ă 00ED |
D... | } 007D |
J 004A |
K 004B |
L 004C |
M 004D |
N 004E |
O 004F |
P 0050 |
Q 0051 |
R 0052 |
Ăź 00EE |
ĂŻ 00EF |
Ă° 00F0 |
ñ 00F1 |
ĂČ 00F2 |
Ăł 00F3 |
E... | \ 005C |
ĂŽ 00F4 |
S 0053 |
T 0054 |
U 0055 |
V 0056 |
W 0057 |
X 0058 |
Y 0059 |
Z 005A |
Ă” 00F5 |
ö 00F6 |
Ă· 00F7 |
Ăž 00F8 |
Ăč 00F9 |
Ăș 00FA |
F... | 0 0030 |
1 0031 |
2 0032 |
3 0033 |
4 0034 |
5 0035 |
6 0036 |
7 0037 |
8 0038 |
9 0039 |
Ă» 00FB |
ĂŒ 00FC |
Ăœ 00FD |
ĂŸ 00FE |
Ăż 00FF |
APC 009F |
Notes :
|
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âextension ISO 8859 (en vert) 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.
Ensemble, 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 no 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).
Colonne Unicode |
Quartet 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 00 |
SOH 01 |
STX 02 |
ETX 03 |
EOT 37 |
ENQ 2D |
ACK 2E |
BEL 2F |
BS 16 |
HT 05 |
LF 15 |
VT 0B |
FF 0C |
CR 0D |
SO 0E |
SI 0F |
001... | DLE 10 |
DC1 11 |
DC2 12 |
DC3 13 |
DC4 3C |
NAK 3D |
SYN 32 |
ETB 26 |
CAN 18 |
EM 19 |
SUB 3F |
ESC 27 |
FS 1C |
GS 1D |
RS 1E |
US 1F |
002... | SP 40 |
! 5A |
" 7F |
# 7B |
$ 5B |
% 6C |
& 50 |
' 7D |
( 4D |
) 5D |
* 5C |
+ 4E |
, 6B |
- 60 |
. 4B |
/ 61 |
003... | 0 F0 |
1 F1 |
2 F2 |
3 F3 |
4 F4 |
5 F5 |
6 F6 |
7 F7 |
8 F8 |
9 F9 |
: 7A |
; 5E |
< 4C |
= 7E |
> 6E |
? 6F |
004... | @ 7C |
A C1 |
B C2 |
C C3 |
D C4 |
E C5 |
F C6 |
G C7 |
H C8 |
I C9 |
J D1 |
K D2 |
L D3 |
M D4 |
N D5 |
O D6 |
005... | P D7 |
Q D8 |
R D9 |
S E2 |
T E3 |
U E4 |
V E5 |
W E6 |
X E7 |
Y E8 |
Z E9 |
[ AD |
\ E0 |
] BD |
^ 5F |
_ 6D |
006... | ` 79 |
a 81 |
b 82 |
c 83 |
d 84 |
e 85 |
f 86 |
g 87 |
h 88 |
i 89 |
j 91 |
k 92 |
l 93 |
m 94 |
n 95 |
o 96 |
007... | p 97 |
q 98 |
r 99 |
s A2 |
t A3 |
u A4 |
v A5 |
w A6 |
x A7 |
y A8 |
z A9 |
{ C0 |
| 4F |
} D0 |
~ A1 |
DEL 07 |
008... | PAD 20 |
HOP 21 |
BPH 22 |
NBH 23 |
IND 24 |
NEL 25 |
SSA 06 |
ESA 17 |
HTS 28 |
HTJ 29 |
VTS 2A |
PLD 2B |
PLU 2C |
RI 09 |
SS2 0A |
SS3 1B |
009... | DCS 30 |
PU1 31 |
PU2 1A |
STS 33 |
CCH 34 |
MW 35 |
SPA 36 |
EPA 08 |
SOS 38 |
SGCI 39 |
SCI 3A |
CSI 3B |
ST 04 |
OSC 14 |
PM 3E |
APC FF |
00A... | NBSP 41 |
ÂĄ 42 |
Âą 43 |
ÂŁ 44 |
€ 45 |
„ 46 |
Š 47 |
§ 48 |
š 49 |
© 4A |
ÂȘ 51 |
« 52 |
ÂŹ 53 |
SHY 54 |
Âź 55 |
ÂŻ 56 |
00B... | ° 57 |
± 58 |
ÂČ 59 |
Âł 62 |
ÂŽ 63 |
” 64 |
¶ 65 |
· 66 |
ž 67 |
Âč 68 |
Âș 69 |
» 6A |
Œ 70 |
œ 71 |
Ÿ 72 |
Âż 73 |
00C... | Ă 74 |
Ă 75 |
Ă 76 |
Ă 77 |
Ă 78 |
Ă
80 |
Ă 8A |
Ă 8B |
Ă 8C |
Ă 8D |
Ă 8E |
Ă 8F |
Ă 90 |
Ă 9A |
Ă 9B |
Ă 9C |
00D... | Ă 9D |
Ă 9E |
Ă 9F |
Ă A0 |
Ă AA |
Ă AB |
Ă AC |
Ă AE |
Ă AF |
Ă B0 |
Ă B1 |
Ă B2 |
Ă B3 |
Ă B4 |
Ă B5 |
Ă B6 |
00E... | Ă B7 |
ĂĄ B8 |
Ăą B9 |
ĂŁ BA |
Ă€ BB |
Ă„ BC |
ĂŠ BE |
ç BF |
Ăš CA |
Ă© CB |
ĂȘ CC |
Ă« CD |
ĂŹ CE |
Ă CF |
Ăź DA |
ĂŻ DB |
00F... | Ă° DC |
ñ DD |
ĂČ DE |
Ăł DF |
ĂŽ E1 |
Ă” EA |
ö EB |
Ă· EC |
Ăž ED |
Ăč EE |
Ăș EF |
Ă» FA |
ĂŒ FB |
Ăœ FC |
ĂŸ FD |
Ăż FE |
Notes :
|