> ebcdic | ibm | eldre systemer <
// EBCDIC - Extended Binary Coded Decimal Interchange Code
IBM mainframe
Standard tegnkoding for IBM-mainframe-systemer.
Flere varianter
Støtte for ulike EBCDIC-kodesider og regioninnstillinger.
Legacy-støtte
Viktig for arbeid med eldre mainframe-data.
>> teknisk info
Hvordan EBCDIC fungerer:
EBCDIC (Extended Binary Coded Decimal Interchange Code) er en 8-bits tegnkoding utviklet av IBM. I motsetning til ASCII, som grupperer beslektede tegn, sprer EBCDIC tegnene utover kodeområdet på grunn av sin opprinnelse i hullkortkoder. Ulike EBCDIC-kodesider støtter forskjellige språk og regioner; EBCDIC 037 er den vanligste varianten for USA og Canada.
Eksempler: EBCDIC vs ASCII:
Tegnavbildninger (EBCDIC 037): Tegn | ASCII | EBCDIC -----|-------|-------- Mellomrom| 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 bruke EBCDIC:
- ▸Påkrevd i IBM-mainframe-miljøer
- ▸Kompatibilitet med eldre systemer
- ▸Datamigreringsprosjekter
- ▸COBOL- og mainframe-utvikling
- ▸Bevaring av historiske data
>> ofte stilte spørsmål
Hva er EBCDIC?
EBCDIC (Extended Binary Coded Decimal Interchange Code) er en 8-bits tegnkoding utviklet av IBM i 1963. Den brukes hovedsakelig på IBM-mainframe- og mellomklassemaskiner. I motsetning til ASCII gjenspeiler tegnoppsettet i EBCDIC arven fra hullkort.
Hvorfor er EBCDIC annerledes enn ASCII?
EBCDIC utviklet seg fra hullkortkoder, der hull i bestemte posisjoner representerte tegn. Dette førte til en ikke-sammenhengende struktur – bokstaver er ikke sekvensielle, og det finnes mellomrom mellom bokstavgrupper. ASCII ble derimot designet fra bunnen av for effektivitet og er derfor mer logisk for moderne databehandling.
Hva er EBCDIC-kodesider?
EBCDIC har flere varianter kalt kodesider for ulike språk og regioner. Vanlige eksempler er: EBCDIC 037 (USA/Canada), EBCDIC 500 (internasjonal), EBCDIC 875 (gresk) og EBCDIC 1047 (Open Systems). Hver kodeside har egne tegnavbildninger for å støtte lokale krav.
Hvor brukes EBCDIC fortsatt?
EBCDIC brukes fremdeles mye i IBM-mainframe-miljøer (z/OS, z/VM, z/VSE), i bank- og finanssystemer, offentlige legacy-løsninger og COBOL-applikasjoner. Mange organisasjoner beholder EBCDIC-systemer for forretningskritiske prosesser som har kjørt stabilt i flere tiår.
// Tegnkartlegging 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ørsmål
S: Hvorfor danner bokstavene A–Z ikke en sammenhengende blokk i EBCDIC?
S: EBCDIC stammer fra hullkortenes soner: A–I ligger på C1–C9, J–R på D1–D9, S–Z på E2–E9, med hull imellom. Derfor kan man ikke konvertere med enkel addisjon.
S: Hvilken kodeside bør jeg velge?
S: Vanlige er CP037 (USA/Canada), CP500 (internasjonal) og CP1047 (z/OS Unix). De skiller seg mest for tegn som [ ] ^ ! |. Velg den som skapte dataene.
S: Hva skjer med linjeskift ved konvertering?
S: Mainframe-filer har ofte poster med fast lengde uten linjeskift; linjeskifttegn (LF/NEL) ligger på ulike steder avhengig av kodesiden (f.eks. LF = 25 i CP037). Kontroller dem etter konvertering.