EBCDIC - EBCDIC

Rodzina kodowania EBCDIC
Klasyfikacja 8-bitowe podstawowe kodowania łacińskie (nie-ASCII)
Poprzedzony BCD

Binary Coded Decimal rozszerzony kod wymiany ( EBCDIC ; / ɛ b s ɪ d ɪ k / ) jest ośmio- nieco kodowanie znaków używane głównie na IBM mainframe i IBM komputer średniotonowy systemów operacyjnych. Wywodzi się z kodu używanego z kartami dziurkowanymi i odpowiadającego mu sześciobitowego kodu dziesiętnego zakodowanego binarnie, używanego z większością komputerowych urządzeń peryferyjnych IBM z późnych lat pięćdziesiątych i wczesnych sześćdziesiątych. Jest on wspierany przez różnych platformach innych niż IBM, takich jak Fujitsu-Siemens ' BS2000 / OSD, OS-IV, MSP i MSP-EX, seria SDS Sigma , Unisys VS/9 , Unisys MCP i ICL VME .

Historia

Karta dziurkowana z kodowaniem Hollerith zestawu znaków 1964 EBCDIC. Kontrast u góry jest wzmocniony, aby pokazać drukowane znaki.

EBCDIC został opracowany w 1963 i 1964 roku przez IBM i został ogłoszony wraz z wprowadzeniem na rynek linii komputerów mainframe IBM System/360 . Jest to ośmiobitowe kodowanie znaków, opracowane oddzielnie od siedmiobitowego schematu kodowania ASCII . Został stworzony, aby rozszerzyć istniejący Binary-Coded Decimal (BCD) Interchange Code lub BCDIC , który sam w sobie został opracowany jako skuteczny sposób kodowania dwóch stref i dziurkowania liczb na kartach dziurkowanych do sześciu bitów. Odrębne kodowanie „s” i „S” (używając pozycji 2 zamiast 1) zostało zachowane w przypadku kart dziurkowanych, w których nie było pożądane, aby dziurkacze nie znajdowały się zbyt blisko siebie, aby zapewnić integralność fizycznej karty.

Chociaż IBM był głównym orędownikiem komitetu standaryzacyjnego ASCII, firma nie miała czasu na przygotowanie urządzeń peryferyjnych ASCII (takich jak maszyny do dziurkowania kart) do wysyłki z komputerami System/360, więc firma zdecydowała się na EBCDIC. System/360 odniósł ogromny sukces, wraz z klonami takimi jak RCA Spectra 70 , ICL System 4 i Fujitsu FACOM, podobnie jak EBCDIC.

Wszystkie urządzenia peryferyjne i systemy operacyjne IBM mainframe i midrange używają EBCDIC jako własnego kodowania (z tolerancją dla ASCII, na przykład ISPF w systemie z/OS może przeglądać i edytować zarówno pliki zakodowane w EBCDIC, jak i ASCII). Oprogramowanie i wiele sprzętowych urządzeń peryferyjnych może dokonywać translacji do iz kodowania, a nowoczesne komputery mainframe (takie jak IBM Z ) zawierają instrukcje procesora na poziomie sprzętowym, aby przyspieszyć translację między zestawami znaków.

Istnieje format transformacji Unicode zorientowany na EBCDIC o nazwie UTF-EBCDIC, zaproponowany przez konsorcjum Unicode, zaprojektowany w celu umożliwienia łatwej aktualizacji oprogramowania EBCDIC do obsługi Unicode, ale nieprzeznaczony do stosowania w środowiskach otwartej wymiany. Nawet w systemach z rozbudowaną obsługą EBCDIC nie cieszył się popularnością. Na przykład system z/OS obsługuje kodowanie Unicode (preferuje kodowanie UTF-16 ), ale system z/OS ma ograniczoną obsługę UTF-EBCDIC.

Nie wszystkie produkty IBM korzystają z EBCDIC; IBM AIX , Linux on IBM Z i Linux on Power używają ASCII.

Kompatybilność z ASCII

Było wiele trudności z pisaniem oprogramowania, które działałoby zarówno w ASCII, jak i EBCDIC.

  • Luki między literami powodowały, że prosty kod działający w ASCII nie działał na EBCDIC. Na przykład wypisałby alfabet od A do Z, jeśli używany jest ASCII, ale wypisze 41 znaków (w tym wiele nieprzypisanych) w EBCDIC. Naprawienie tego wymagało skomplikowania kodu z wywołaniami funkcji, czemu bardzo sprzeciwiali się programiści.for (c = 'A'; c <= 'Z'; ++c) putchar(c);
  • Sortowanie EBCDIC polega na umieszczaniu małych liter przed wielkimi literami i liter przed cyframi, dokładnie odwrotnie niż ASCII.
  • Języki programowania i formaty plików oraz protokoły sieciowe zaprojektowane dla ASCII szybko wykorzystały dostępne znaki interpunkcyjne (takie jak nawiasy klamrowe { i } ), które nie istniały w EBCDIC, co utrudniało tłumaczenie na systemy EBCDIC. Odwrotnie, EBCDIC zawierał kilka znaków, takich jak ¢ ( cent amerykański ), które były używane w systemach IBM i nie mogły zostać przetłumaczone na ASCII.
  • Najpopularniejszą konwencją nowego wiersza używaną w EBCDIC jest użycie kodu NEL (NEXT LINE) między wierszami. Konwertery na inne kodowania często zastępują NEL LF lub CR/LF , nawet jeśli w docelowym kodowaniu występuje NEL. Powoduje to, że LF i NEL są tłumaczone na ten sam znak i nie można ich odróżnić.
  • Jeśli użyto siedmiobitowego ASCII, w 8-bitowych bajtach znajdował się „nieużywany” wysoki bit i wiele programów przechowywało tam inne informacje. Oprogramowanie spakowałoby również siedem bitów i odrzuciłoby ósmy, na przykład pakując pięć siedmiobitowych znaków ASCII w 36-bitowe słowo. Na PDP-11 bajty z ustawionym wysokim bitem były traktowane jako liczby ujemne, co zostało skopiowane do C , powodując nieoczekiwane problemy, jeśli ustawiono wysoki bit. To wszystko utrudniło przejście z ASCII na 8-bitowy EBCDIC (a także utrudniło przełączenie na 8-bitowe rozszerzone kodowanie ASCII ).

Układ strony kodowej

Istnieją setki stron kodowych EBCDIC opartych na oryginalnym kodowaniu znaków EBCDIC; istnieje wiele stron kodowych EBCDIC przeznaczonych do użytku w różnych częściach świata, w tym strony kodowe dla skryptów niełacińskich, takich jak chiński, japoński (np. EBCDIC 930, JEF i KEIS), koreański i grecki (EBCDIC 875 ). Istnieje również ogromna liczba odmian, w których litery są zamieniane bez wyraźnego powodu.

Poniższa tabela przedstawia „niezmienny podzbiór” EBCDIC, czyli znaki, które powinny mieć takie same przypisania na wszystkich stronach kodowych EBCDIC, które używają alfabetu łacińskiego. Pokazuje również (na szaro) brakujące znaki interpunkcyjne ASCII i EBCDIC, znajdujące się w miejscu ich położenia na stronie kodowej 37 (jeden z wariantów strony kodowej EBCDIC). Puste komórki są wypełnione znakami charakterystycznymi dla regionu w wariantach, ale znaki w kolorze szarym są często zamieniane lub zastępowane. W każdej komórce pierwszy wiersz jest skrótem kodu sterującego lub samego znaku; a drugi wiersz to kod Unicode (pusty dla kontrolek, które nie istnieją w Unicode).

EBCDIC
_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _MI _F
0_ NUL
0000
SOH
0001
STX
0002
ETX
0003
SEL
 
HT
0009
RNL
 
DEL
007F
GE
 
SPS
 
RPT
 
VT
000B
FF
000C
CR
000D
SO
000E
SI
000F
1_ DLE
0010
DC1
0011
DC2
0012
DC3
0013
res/enp
 
NL
0085
BS
0008
POC
 
MOŻE
0018
EM
0019
UBS
 
CU1
 
IFS
001C
IGS
001D
IRS
001E
ius / itb
001F
2_ DS
 
SOS
 
FS
 
WUS
 
obejście/wejście
 
LF
000A
ETB
0017
ESC
001B
SA
 
SFE
 
sm/sw
 
CSP
 
MSZ
 
ENQ
0005
ACK
0006
BEL
0007
3_ SYN
0016
IR
 
PP
 
TRN
 
NBS
 
EOT
0004
SBS
 
TO
 
RFF
 
CU3
 
DC4
0014
NAK
0015
SUB
001A
4_ SP
0020
¢
00A2
.
002E
<
003C
(
0028
+
002B
|
007C
5_ &
0026
!
0021
0024
*
002A
)
0029
;
003B
¬
00AC
6_ -
002D
/
002F
¦
00A6
,
002C
%
0025
_
005F
>
003E
?
003F
7_ `
0060
:
003A
#
0023
@
0040
'
0027
=
003D

0022
8_
0061
b
0062
c
0063
d
0064
e
0065
f
0066
g
0067
h
0068
I
0069
±
00B1
9_ j
006A
k
006B
L
006C
m
006D
n
006E
o
006F
p
0070
q
0071
R
0072
A_ ~
007E
s
0073
t
0.074
U
0075
v
0076
w
0077
x
0078
y
0079
z
007A
B_ ^
005E
[
005B
]
005D
C_ {
007B

0041
B
0042
C
0043
D
0044
E
0045
F
0046
G
0047
H
0048
I
0049
D_ }
007D
J
004A
K
004B
L
004C
M
004D
N
004E
O
004F
P
0050
P
0051
R
0052
MI_ \
005C
S
0053
T
0054
U
0055
V
0056
W
0057
X
0058
Tak
0059
Z
005A
F_ 0
0030
1
0031
2
0032
3
0033
4
0034
5
0035
6
0036
7
0037
8
0038
9
0039
EO
 

  List  Numer  Interpunkcja  Symbol  Inne  Nieokreślony

Definicje kontroli innych niż ASCII EBCDIC

Poniżej znajdują się definicje znaków sterujących EBCDIC, które albo nie są odwzorowywane na znaki sterujące ASCII , albo mają dodatkowe zastosowania. W przypadku odwzorowania na Unicode są one w większości odwzorowywane na punkty kodowe znaków kontrolnych C1 w sposób określony przez IBM Character Data Representation Architecture (CDRA).

Chociaż domyślne mapowanie nowej linii (NL) odpowiada znakowi następnej linii ISO/IEC 6429 (NEL) (którego zachowanie jest również określone, ale nie wymagane, w załączniku 14 Unicode), większość z tych kontrolek mapowanych w C1 jest zgodnych ani tych z zestawu ISO/IEC 6429 C1 , ani tych z innych zarejestrowanych zestawów kontrolnych C1, takich jak ISO 6630 . Chociaż skutecznie sprawia to, że kontrole nie-ASCII EBCDIC są unikalnym zestawem kontrolnym C1, nie znajdują się one wśród zestawów kontrolnych C1 zarejestrowanych w rejestrze ISO-IR , co oznacza, że ​​nie mają przypisanej sekwencji oznaczenia zestawu kontrolnego (jak określono przez ISO/ IEC 2022 i opcjonalnie dozwolone w ISO/IEC 10646 (Unicode)).

Poza U+0085 (Next Line), standard Unicode nie nakazuje interpretacji znaków kontrolnych C1, pozostawiając ich interpretację protokołom wyższego poziomu (sugeruje, ale nie wymaga, ich interpretacje ISO/IEC 6429 w przypadku braku zastosowania do innych celów), więc to mapowanie jest dozwolone w Unicode, ale nie jest przez niego określone.

Mnemoniczny EBCDIC Parowanie CDRA Nazwa Opis
SEL 04 009C Wybierz Znak kontrolny urządzenia przyjmujący parametr jednobajtowy.
RNL 06 0086 Wymagana nowa linia Resetowanie łamania linii Tryb tabulatora wcięcia
GE 08 0097 Ucieczka graficzna Przesunięcie bez blokady, które zmienia interpretację kolejnego znaku (patrz np. strona kodowa 310 ). Porównaj SS2 ISO/IEC 6429 (008E).
SPS 09 008D Napisany u góry Rozpocznij indeks górny lub cofnij indeks dolny. Porównaj PLU ISO/IEC 6429 (008C).
RPT 0A 008E Powtarzać Przełącz na tryb pracy powtarzając bufor wydruku
OZE/ENP 14 009D Przywróć, włącz prezentację Wznów wyjście (po BYP/INP )
Holandia 15 0085 (000A) Nowa linia Przerwanie linii. Domyślne mapowanie (0085) odpowiada normie NEL normy ISO/IEC 6429 . Mapowania czasami zamieniane z Line Feed (EBCDIC 0x25) zgodnie z konwencją łamania linii UNIX.
POC 17 0087 Komunikacja z Operatorem Programu Następnie dwa jednobajtowe operatory identyfikują konkretną funkcję, na przykład światło lub klawisz funkcyjny. Porównaj z ISO/IEC 6429 CSI (009B), OSC (009D) i APC (009F).
UBS 1A 0092 Backspace jednostki Ułamkowy backspace.
CU1 1B 008F Klient użyj jednego Nie używane przez IBM; do użytku klienta.
IUS/ITB 1F 001F Separator jednostek wymiany, pośredni blok transmisji Używany jako separator informacji do zakończenia bloku zwanego „jednostką” (jak w ASCII ; patrz także IR ) lub używany jako kod sterujący transmisją do wyznaczania końca bloku pośredniego.
DS 20 0080 Wybierz cyfrę Używany przez instrukcję edycji procesora S/360 (ED)
SOS 21 0081 Początek znaczenia Używany przez instrukcję edycji procesora S/360 (ED). (Uwaga: różni się od SOS ISO/IEC 6429. )
FS 22 0082 Separator pola Używany przez instrukcję edycji procesora S/360 (ED). (Uwaga: Separator plików (Interchange) , jako skrót FS w ASCII, ma 0x1C i jest skrótem IFS.)
WUS 23 0083 Podkreślenie słowa Podkreśla bezpośrednio poprzedzające słowo. Porównaj z SGR ISO/IEC 6429 .
BYP/INP 24 0084 Obejście, wstrzymanie prezentacji Dezaktywuje wyjście, tj. ignoruje wszystkie znaki graficzne i znaki sterujące poza kodami sterowania transmisją i RES/ENP, aż do następnego RES/ENP .
SA 28 0088 Ustaw atrybut Oznacza początek sekwencji sterującej specyficznej dla urządzenia o stałej długości. Przestarzałe na rzecz CSP .
SFE 29 0089 Rozszerzone pole startowe Zaznacza początek sekwencji sterującej urządzenia o zmiennej długości. Przestarzałe na rzecz CSP .
SM/SW 2A 008A Ustaw tryb, przełącznik Sterowanie specyficzne dla urządzenia, które ustawia tryb działania, takie jak przełącznik bufora.
CSP 2B 008B Prefiks sekwencji kontrolnej Zaznacza początek sekwencji sterującej urządzenia o zmiennej długości. Po którym następuje bajt klasy określający kategorię funkcji sterującej, bajt licznika określający długość sekwencji (w tym liczbę i bajty typu, ale nie bajt klasy lub początkowy CSP), bajt typu identyfikujący funkcję kontrolną w tej kategorii oraz zero lub więcej bajtów parametrów. Porównaj z DCS (0090) i CSI (009B) ISO/IEC 6429 .
MSZ 2C 008C Modyfikuj atrybut pola Zaznacza początek sekwencji sterującej urządzenia o zmiennej długości. Przestarzałe na rzecz CSP .
30 0090 (skryty) Zarezerwowane do wykorzystania w przyszłości przez IBM
31 0091 (skryty) Zarezerwowane do wykorzystania w przyszłości przez IBM
IR 33 0093 Zwrot indeksu Przejdź na początek następnej linii (patrz także NL ) lub zakończ jednostkę informacyjną (patrz także IUS/ITB ).
PP 34 0094 Pozycja prezentacji Następnie dwa parametry jednobajtowe (po pierwsze funkcja, po drugie numer kolumny lub wiersza) do ustawienia bieżącej pozycji. Porównaj z CUP i HVP ISO/IEC 6429 .
TRN 35 0095 Przezroczysty Po którym następuje jednobajtowy parametr, który wskazuje liczbę kolejnych bajtów przezroczystych danych.
NBS 36 0096 Numeryczna spacja Przesuń wstecz o szerokość jednej cyfry.
SBS 38 0098 Indeks Rozpocznij indeks dolny lub cofnij indeks górny. Porównaj PLD normy ISO/IEC 6429 (008B).
TO 39 0099 Wcięcie Tab Wcina bieżący i wszystkie kolejne wiersze, aż do napotkania RNL lub RFF .
RFF 3A 009A Wymagany kanał formularza Resetowanie podziału strony w trybie tabulatora wcięcia .
CU3 3B 009B Użycie klienta dwa Nie używane przez IBM; do użytku klienta.
3E 009E (skryty) Zarezerwowane do wykorzystania w przyszłości przez IBM
EO FF 009F Osiem jedynek Wszystkie te znaki używane jako wypełniacz

Strony kodowe z zestawami znaków Latin-1

Poniższe strony kodowe zawierają pełny zestaw znaków Latin-1 (ISO/IEC 8859-1). Pierwsza kolumna podaje numer oryginalnej strony kodowej. Druga kolumna podaje numer strony kodowej zaktualizowanej znakiem euro (€) zastępującym znak waluty uniwersalnej (¤) (lub w przypadku EBCDIC 924 z zestawem zmienionym zgodnie z ISO 8859-15 )

CCSID
Aktualizacja euro
Kraje
037 1140 Australia, Brazylia, Kanada, Nowa Zelandia, Portugalia, RPA, USA
273 1141 Austria, Niemcy
277 1142 Dania, Norwegia
278 1143 Finlandia, Szwecja
280 1144 Włochy
284 1145 Ameryka Łacińska, Hiszpania
285 1146 Irlandia, Wielka Brytania
297 1147 Francja
500 1148 Międzynarodowy
871 1149 Islandia
1047 924 Systemy otwarte ( kompilator MVS C )

Krytyka i humor

Adwokat oprogramowania open source i twórca oprogramowania Eric S. Raymond pisze w swoim Jargon File, że EBCDIC był znienawidzony przez hakerów, przez co miał na myśli członków subkultury entuzjastycznych programistów. Jargon File 4.4.7 podaje następującą definicję:

EBCDIC: /eb´s@·dik/, /eb´see`dik/, /eb´k@·dik/, rz. [skrót, Extended Binary Coded Decimal Interchange Code] Domniemany zestaw znaków używany na dinozaurach IBM. Występuje w co najmniej sześciu wzajemnie niekompatybilnych wersjach, z których każda zawiera takie atrakcje jak nieciągłe sekwencje liter oraz brak kilku znaków interpunkcyjnych ASCII dość ważnych dla nowoczesnych języków komputerowych (dokładnie które znaki są nieobecne zależy od używanej wersji EBCDIC patrzeć na). IBM zaadaptował EBCDIC z kodu karty dziurkowanej na początku lat sześćdziesiątych i ogłosił go jako taktykę kontroli klienta (patrz spisek złącza ), odrzucając już ustalony standard ASCII. Dzisiaj IBM twierdzi, że jest firmą z otwartymi systemami , ale własny opis wariantów EBCDIC i sposób konwersji między nimi jest nadal wewnętrznie tajny, spalić przed przeczytaniem. Hakerzy bledną na samą nazwę EBCDIC i uważają to za przejaw najczystszego zła.

—  Plik żargonu 4.4.7

Projekt EBCDIC był również źródłem wielu żartów. Jeden taki żart poszedł:

Profesor: „Więc amerykański rząd udał się do IBM, aby opracować standard szyfrowania , a oni wymyślili…”
Student: „EBCDIC!”

Odniesienia do zestawu znaków EBCDIC znajdują się w klasycznej serii gier przygodowych Infocom, Zork . W „Machine Room” w Zork II , EBCDIC jest używany do sugerowania niezrozumiałego języka:

To duże pomieszczenie pełne rozmaitych ciężkich maszyn, które głośno warczą. W pokoju pachnie spalonymi opornikami. Wzdłuż jednej ściany znajdują się trzy przyciski, które są odpowiednio okrągłe, trójkątne i kwadratowe. Oczywiście nad tymi przyciskami znajdują się instrukcje napisane w EBCDIC...

Zobacz też

Bibliografia

Zewnętrzne linki