EBCDIC - 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
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).
_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 zł |
* 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
- Architektura reprezentacji danych znakowych (CDRA) od IBM w Wayback Machine (archiwum 13.05.2018). Zawiera oficjalne informacje IBM dotyczące stron kodowych i zestawów znaków.
- Dokumentacja strony kodu hosta firmy IBM przedstawia wykresy kodu dla kilku jednobajtowych stron EBCDIC.
- „Strony kodowe” .z „IBM i globalizacja” .
- ICU Converter Explorer Zawiera więcej informacji o EBCDIC pochodzących z CDRA firmy IBM, w tym DBCS EBCDIC (zestaw znaków dwubajtowych EBCDIC)
- Tabele mapowania zestawu znaków ICU Zawiera czytelne dla komputera tabele mapowania Unicode dla EBCDIC i wielu innych zestawów znaków
- Lista znaków EBCDIC , w tym wartości dziesiętne i szesnastkowe, nazwa symboliczna i znak/funkcja
- Strony kodowe EBCDIC z zestawem znaków Latin-1 (JavaScript)
- Wszystkie strony kodowe EBCDIC i kody ucieczki grafiki 3270 w Wayback Machine (archiwum 27 sierpnia 2016 r.)