Ugrás a tartalomhoz

EBCDIC

A Wikipédiából, a szabad enciklopédiából
A nyomtatható változat már nem támogatott, és hibásan jelenhet meg. Kérjük, frissítsd a böngésződ könyvjelzőit, és használd a böngésző alapértelmezett nyomtatás funkcióját.

EBCDIC (ejtsd: "ebszidik") az IBM nagyszámítógépein és operációs rendszerein, mint a z/OS, az OS/390, a VM és a VSE, valamint a minikomputerein, mint OS/400 és i5/OS használt 8 bites karakter kódolási, vagy kódlap rendszer. Több más, nem IBM platformon is használják, mint a Fujitsu-Siemens BS2000/OSD, a HP MPE/iX, és az Unisys MCP. Az EBCDIC elnevezés az angol Extended Binary Coded Decimal Interchange Code, azaz a bővített, binárisan kódolt decimális (adat)csere kód rövidítése. A lyukkártya rendszerből származik, és szoros kapcsolatban van a 6 bites binárisan kódolt decimális kóddal, amit az IBM minden számítógépe és perifériája használt a késői 1950-es és a korai 1960-as évek között.

Története

Holerit lyukkártya 1964-ben szabványosított EBCDIC karakter készlettel. A lyukkombinációknak megfeleltette karakterek a kártya tetején láthatók nyomtatva.

Az EBCDIC rendszert az IBM alakította ki 1963 és 1964 között, és az IBM System/360 rendszerekkel együttesen került bejelentésre. Az akkor már létező, binárisan kódolt decimális kódrendszer bővítése volt. A tervezése az ASCII-tól teljesen függetlenül történt. Az EBCDIC 8 bites kódolású kód, szemben a 7 bites ASCII-vel.

Érdekes, hogy az IBM volt az egyik fő támogatója az ASCII szabványosítási bizottságának. Ugyanakkor, az IBM-nek nem volt ideje elkészítenie az ASCII perifériáit (mint például kártyalyukasztó), ezért a System/360 számítógép rendszereit EBCDIC kódolással szállította, mivel a cég időre csak az EBCDIC perifériáit tudta használni. A System/360 széles körben sikeres lett, vele együtt az EBCDIC is.

Minden IBM nagyszámítógép periféria és operációs rendszer (kivéve a Linux-ot a zSeries-en) egységes EBCDIC kódolást használ, és szoftver kódolja azt át más kódrendszerekre. Sok periféria hardvere nyújt hasonló "fordítási" szolgáltatást a modern nagyszámítógépeknél (mint az IBM zSeries) ideértve azokat a hardver szintű processzor utasításokat, amelyek jelentősen meggyorsítják a különböző kódtáblák közötti konverziókat.

A tervezése idején az EBCDIC a lyukkártyákon keresztül viszonylag egyszerű adatbeviteli lehetőséget nyújtott a nagyszámítógépeken. Mivel a nagyszámítógépeken kívül máig sem használ más lyukkártyákat, az EBCDIC biztosítja a nagyszámítógépes világban a visszafelé kompatibilitás egy fontos részét. A kódolásnak különösebb technikai előnye az ASCII alapú kódokkal, mint az ISO-8859 sorozat vagy a Unicode, nincsen. Mint az egy byte-os bővített ASCII kódtábla, a legtöbb EBCDIC kódtábla is csak 2 nyelvet enged meg (angol és egy másik nyelv) az adatbázisok és szöveges (text) fileok használatánál.

Amikor a soknyelvű szövegek támogatása valódi igényként jelentkezett, a rendszernek sokféle karaktert kellett támogatnia. Ezt általában a Unicode valamilyen formájának a támogatásával oldották meg. Létezik egy EBCDIC Unicode Transzformációs Formátum amit UTF-EBCDIC-nek neveznek, és a Unicode konzorcium javasolta a használatát, de a nyílt adatcsere környezetben, illetve az EBCDIC alapú rendszerekben szinte soha sem használták. Az IBM nagyszámítógépek támogatják az UTF-16-ot, de natív módon nem támogatják az UTF-EBCDIC-et.

Technikai részletek

Az EBCDIC és az ASCII-alapú kódlapok semmilyen szinten nem kompatibilisek egymással. Mivel a számítógépek "számokból" értenek, a kódlapok valójában nem mások, mint számokhoz karakterek rendelése. Azonos értékek különböző karaktereket jelentenek, kódtáblától függően. EBCDIC formában tárolt értékeket konvertálni kell, mielőtt ASCII alapú gépekre, mint személyi számítógép átkerülhet.

Egy egyedülálló EBCDIC byte 8 bitet foglal el, amelyeket két félre, két nibblere oszthatunk. Az első négy bit a zóna – zone és a karakter kategóriáját jeleníti meg, a második négy bit, a szám – digit, ami az adott karaktert azonosítja.

Teljesen összhangban vannak a karakterek hexadecimális kódjai és a lyukkártya kódok az EBCDIC-ben. Ennek az az oka, hogy az IBM a lyukkártyán 12 lyukasztható sort definiált oszloponként, és oszloponként legfeljebb két lyukasztás engedélyezett, az első lyukasztásnak valahol az első 3 sorban kell lennie (ezt nevezték zónának), a második lyukasztás pedig fennmaradó 9 sorban (ezt nevezték számnak) lehet. Így a zónához a 0-3 értékek, míg a számhoz a 0-9 értékek köthetők. Az EBCDIC kezdeti változata csak a (0xf-zone)<<4+szám alapján működött, és csak az alsó-bal 10x4-es részhez (a következő táblán látható) voltak karakterek rendelve.

Az első 64 kódhelyen (00-3F) a vezérlő karakterek vannak, amelyek közül 33 megegyezik az ASCII-val. Meg kell ugyanakkor jegyezni, hogy a 33 karakter azért különböző: míg az ASCII a kocsi vissza – carriage return (CR) és az soremelés – line feed (LF) kódokat használja, amelyek általában sorvég jelölők az ASCII szöveg fájlokban, addig az IBM még pluszban bevezette az új sor – newline (NL) ls a vissza újsor – reverse newline (RNL) kódokat. A többi 31 vezérlő karaktert terminál- és eszköz vezérléshez használják, többnyire az IBM valamilyen saját hardverére jellemző funkcionalitással ruházta fel.

Az EBCDIC kódolásnak számtalan változata létezik, különböző országokra testre szabva. Néhány Kelet-Ázsiai ország az EBCDIC két byte-os bővített változatát használja, ami megengedi a kínai, japán és koreai karakterek megjelenítést a nagyszámítógépeiken. A két byte-os EBCDIC bővítésnél vannak ún. "shift vagy váltó kódok", a [0x0E,0x0F] amelyekkel a két- és egy byte-os mód között lehet váltani.

Az IBM a sokféle kódtáblát egy speciális névvel azonosítja, ami egy szám, ez a CCSID (Coded Character Set IDentifier – kódolt karakterkészlet azonosító). Sajnálatos módon, azonos CCSID érték mellett is lehetségesek különböző karakterkiosztások. Például, az "új sor" karakter más értékű a z/OS UNIX System Services-nél, szemben más EBCDIC alapú operációs rendszerekkel. Ez egy állandó problémát jelent a gépek közötti EBCDIC kódú szövegek átvitelénél.

A kódtábla felépítése

A következő kódtábla, a CCSID 500-as, az EBCDIC egyik változata. A 00–3F között, és FF-en vannak a vezérlő karakterek, 40 a szóköz, 41 a nem törhető szóköz, és CA a soft hyphen. A karaktereket az ISO/IEC 8859-1-nek megfelelő kódokkal ábrázoljuk:

-0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -A -B -C -D -E -F
0- NUL
00
SOH
01
STX
02
ETX
03
SEL
 
HT
09
RNL
 
DEL
7F
GE
 
SPS
 
RPT
 
VT
0B
FF
0C
CR
0D
SO
0E
SI
0F
1- DLE
10
DC1
11
DC2
12
DC3
13
RES
ENP
 
NL
 
BS
08
POC
 
CAN
18
EM
19
UBS
 
CU1
 
IFS
1C
IGS
1D
IRS
1E
IUS
ITB
1F
2- DS
 
SOS
 
FS
 
WUS
 
BYP
INP
 
LF
0A
ETB
17
ESC
1B
SA
 
SFE
 
SM
SW
 
CSP
 
MFA
 
ENQ
05
ACK
06
BEL
07
3-  
 
 
 
SYN
16
IR
 
PP
 
TRN
 
NBS
 
EOT
04
SBS
 
IT
 
RFF
 
CU3
 
DC4
14
NAK
15
 
 
SUB
1A
4- SP
20
RSP
A0
â
E2
ä
E4
à
E0
á
E1
ã
E3
å
E5
ç
E7
ñ
F1
[
5B
.
2E
<
3C
(
28
+
2B
!
21
5- &
26
é
E9
ê
EA
ë
EB
è
E8
í
E0
î
EE
ï
EF
ì
ED
ß
DF
]
5D
$
24
*
2A
)
29
;
3B
^
5E
6- -
2D
/
2F
Â
C2
Ä
C4
À
C0
Á
C1
Ã
C3
Å
C5
Ç
C7
Ñ
D1
¦
A6
,
2C
%
25
_
5F
>
3E
?
3F
7- ø
F8
É
C9
Ê
CA
Ë
CB
È
C8
Í
CD
Î
CE
Ï
CF
Ì
CC
`
60
:
3A
#
23
@
40
'
27
=
3D
"
22
8- Ø
D8
a
61
b
62
c
63
d
64
e
65
f
66
g
67
h
68
i
69
«
AB
»
BB
ð
F0
ý
FD
þ
FE
±
B1
9- °
B0
j
6A
k
6B
l
6C
m
6D
n
6E
o
6F
p
70
q
71
r
72
ª
AA
º
BA
æ
E6
¸
B8
Æ
C6
¤
A4
A- µ
B5
~
7E
s
73
t
74
u
75
v
76
w
76
x
77
y
78
z
79
¡
A1
¿
BF
Ð
D0
Ý
DD
Þ
DE
®
AE
B- ¢
A2
£
A3
¥
A5
·
B7
©
A9
§
A7

B6
¼
BC
½
BD
¾
BE
¬
AC
|
7C
¯
AF
¨
A8
´
B4
×
D7
C- {
7B
A
41
B
42
C
43
D
44
E
45
F
46
G
47
H
48
I
49
SHY
AD
ô
F4
ö
F6
ò
F2
ó
F3
õ
F5
D- }
7D
J
4A
K
4B
L
4C
M
4D
N
4E
O
4F
P
50
Q
51
R
52
¹
B9
û
FB
ü
FC
ù
F9
ú
FA
ÿ
FF
E- \
5C
÷
F7
S
53
T
54
U
55
V
56
W
57
X
58
Y
59
Z
5A
²
82
Ô
D4
Ö
D6
Ò
D2
Ó
D3
Õ
D5
F- 0
30
1
31
2
32
3
33
4
34
5
35
6
36
7
37
8
38
9
39
³
83
Û
D8
Ü
DC
Ù
D9
Ú
DA
EO
 

Apróságok

A híres nyílt forráskódú szoftverek támogatója és ismert hacker, Eric S. Raymond írta Jargon File-jában, hogy az EBCDIC volt az, amit korai programozók és hackerek általánosan utáltak, mivel rendkívül sok, egymással nem kompatibilis változata volt, ami miatt még programokat is kellett módosítani, és az IBM versenyt támasztott a már általánosan bevezetésre kész ASCII-vel.

Egy másik állandó kifogás volt az EBCDIC-el szemben, hogy mivel követte a lyukkártya kódolást, nem volt zárt a karakterkódok sorozata, szemben az ASCII-vel. A kódtábla alapján látható, hogy az "I" és a "J", valamint az "R" és az "S" karakterek kódjai nem folyamatosan követik egymást, ezért a programokban külön ciklussal lehet csak vizsgálni, hogy egy karakter valóban "betű-e".

Ennek az ellentmondásnak köszönhető, hogy az EBCDIC sok vicc forrása lett. Egy a legismertebbek közül:

Tanár: Így az amerikai kormányzat az IBM-hez fordult egy adattitkosítási szabványért, és ezért elkészült –
Diák: Az EBCDIC!

Egyéb, angol nyelvű hivatkozások