AccueilđŸ‡«đŸ‡·Chercher

Extended Binary Coded Decimal Interchange Code

L’Extended Binary Coded Decimal Interchange Code (EBCDIC) est un mode de codage des caractĂšres sur 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

Une carte perforĂ©e 80 colonnes d'IBM d'un des types les plus utilisĂ©s au XXe siĂšcle. La photographie fait apparaĂźtre le jeu de caractĂšre EBCDIC de 1964, qui ajoutait de nouveaux caractĂšres aux caractĂšres prĂ©cĂ©dents.

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).

Jeu de caractùres EBCDIC (variante compatible avec l’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... 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 :

  • Les caractĂšres de contrĂŽle de l’EBCDIC sont indiquĂ©s sur fond rouge (commandes C0) ou mauve (commandes C1).
  • Les positions invariantes de l’ISO 646 ou de l’ISO 8859 sont gĂ©nĂ©ralement invariantes dans les versions de l’EBCDIC. Elles sont indiquĂ©es en fond blanc.
  • Les positions variantes de l’EBCDIC indiquent en italique le point de code Unicode correspondant uniquement Ă  cette variante :
    • 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 (hiragana/katakana) et cyrilliques de l’EBCDIC (qui y codent d’autres lettres nĂ©cessaires Ă  ces Ă©critures).
    • 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/CEI 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 y utilisent ainsi une assignation diffĂ©rente pour de tels symboles.

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).

Transcodage de l’ISO-8859-1 vers EBCDIC (variante compatible avec l’UTF-EBCDIC).
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 :

  • 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/CEI 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

Articles connexes

Liens externes

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.