> ebcdic | ibm | legacy-systemer <
// EBCDIC - udvidet binær-kodet decimal-tegnudvekslingskode
IBM mainframe
Standard-tegnkodning til IBM mainframe-systemer.
Flere varianter
Understøtter forskellige EBCDIC-kodetabeller og lokaliteter.
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)
| Tegn | ASCII | EBCDIC (CP037) |
|---|---|---|
| A | 41 | C1 |
| I | 49 | C9 |
| J | 4A | D1 |
| R | 52 | D9 |
| S | 53 | E2 |
| Z | 5A | E9 |
| a | 61 | 81 |
| z | 7A | A9 |
| 0 | 30 | F0 |
| 9 | 39 | F9 |
| ␠ | 20 | 40 |
| . | 2E | 4B |
| ! | 21 | 5A |
| \n | 0A | 25 |
// 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.