> ebcdic | ibm | legacy-systemer <

// EBCDIC - udvidet binær-kodet decimal-tegnudvekslingskode

0 tegn
0 tegn
[MAINFRAME]

IBM mainframe

Standard-tegnkodning til IBM mainframe-systemer.

[CODE PAGES]

Flere varianter

Understøtter forskellige EBCDIC-kodetabeller og lokaliteter.

[LEGACY]

Legacy-understøttelse

Nødvendigt til arbejde med ældre mainframe-data.

>> teknisk info

Sådan fungerer EBCDIC:

EBCDIC (Extended Binary Coded Decimal Interchange Code) er en 8-bit tegnkodning udviklet af IBM. I modsætning til ASCII, der samler beslægtede tegn, er EBCDIC-tegn spredt ud over koderummet på grund af sin oprindelse i hulkort. Forskellige EBCDIC-kodetabeller understøtter forskellige sprog og regioner, og EBCDIC 037 er den mest almindelige for USA og Canada.

Eksempler: EBCDIC vs ASCII:

Tegnafbildninger (EBCDIC 037):

Tegn | ASCII | EBCDIC
-----|-------|--------
Mellemrum| 0x20  | 0x40
  A   | 0x41  | 0xC1
  B   | 0x42  | 0xC2
  0   | 0x30  | 0xF0
  1   | 0x31  | 0xF1
  a   | 0x61  | 0x81
  b   | 0x62  | 0x82

"ABC" i ASCII: 41 42 43
"ABC" i EBCDIC: C1 C2 C3

"123" i ASCII: 31 32 33
"123" i EBCDIC: F1 F2 F3

Hvorfor bruge EBCDIC:

  • ▸Påkrævet på IBM mainframes
  • ▸Kompatibilitet med legacy-systemer
  • ▸Datamigreringsprojekter
  • ▸COBOL- og mainframe-udvikling
  • ▸Bevaring af historiske data

>> ofte stillede spørgsmål

Hvad er EBCDIC?

EBCDIC (Extended Binary Coded Decimal Interchange Code) er en 8-bit tegnkodning udviklet af IBM i 1963. Den bruges primært på IBM mainframe- og midrange-systemer. I modsætning til ASCII afspejler EBCDIC’s tegnopbygning arven fra hulkort.

Hvorfor er EBCDIC anderledes end ASCII?

EBCDIC udspringer af hulkortkoder, hvor huller i bestemte positioner repræsenterede tegn. Det gav en ikke-sammenhængende opbygning, hvor bogstaver ikke ligger sekventielt, og der er huller mellem bogstavgrupper. ASCII blev designet fra bunden med fokus på effektivitet og er derfor mere logisk til moderne databehandling.

Hvad er EBCDIC-kodetabeller?

EBCDIC har flere varianter kaldet kodetabeller til forskellige sprog og regioner. Almindelige eksempler er: EBCDIC 037 (USA/Kanada), EBCDIC 500 (international), EBCDIC 875 (græsk) og EBCDIC 1047 (open systems). Hver tabel afbilder tegn forskelligt for at understøtte lokale behov.

Hvor bruges EBCDIC stadig?

EBCDIC bruges stadig i stor udstrækning i IBM mainframe-miljøer (z/OS, z/VM, z/VSE), banksystemer og finansielle systemer, offentlige legacy-løsninger og COBOL-applikationer. Mange organisationer driver stadig EBCDIC-systemer til forretningskritiske processer, som har kørt stabilt i årtier.

// Tegnmapping ASCII ↔ EBCDIC (CP037)

TegnASCIIEBCDIC (CP037)
A41C1
I49C9
J4AD1
R52D9
S53E2
Z5AE9
a6181
z7AA9
030F0
939F9
␠2040
.2E4B
!215A
\n0A25

// EBCDIC i kode og på kommandolinjen

Linux        iconv -f IBM037 -t UTF-8 input.dat > output.txt
             iconv -f UTF-8 -t IBM037 input.txt > output.dat
dd           dd conv=ascii  < ebcdic.dat > ascii.txt
             dd conv=ebcdic < ascii.txt  > ebcdic.dat
Python       data.decode('cp037')   /   text.encode('cp037')
Java         new String(bytes, "Cp037")

>> Flere spørgsmål

S: Hvorfor danner bogstaverne A–Z ikke en sammenhængende blok i EBCDIC?

S: EBCDIC stammer fra hulkortenes zoner: A–I ligger på C1–C9, J–R på D1–D9, S–Z på E2–E9, med huller imellem. Derfor kan man ikke konvertere med simpel addition.

S: Hvilken kodeside skal jeg vælge?

S: Almindelige er CP037 (USA/Canada), CP500 (international) og CP1047 (z/OS Unix). De adskiller sig mest ved tegn som [ ] ^ ! |. Vælg den, der skabte dataene.

S: Hvad sker der med linjeskift ved konvertering?

S: Mainframe-filer har ofte poster med fast længde uden linjeskift; linjeskiftstegn (LF/NEL) ligger forskellige steder afhængigt af kodesiden (fx LF = 25 i CP037). Kontrollér dem efter konvertering.

Andre sprog