> ebcdic | ibm | legacy <
// EBCDIC - Extended Binary Coded Decimal Interchange Code
Mainframe IBM
Codifica caratteri standard per i sistemi mainframe IBM.
Varianti multiple
Supporto per diverse code page EBCDIC e impostazioni locali.
Supporto legacy
Fondamentale per lavorare con dati legacy provenienti da mainframe.
>> informazioni tecniche
Come funziona EBCDIC:
EBCDIC (Extended Binary Coded Decimal Interchange Code) è una codifica di caratteri a 8 bit sviluppata da IBM. A differenza di ASCII, che raggruppa insieme i caratteri correlati, EBCDIC li distribuisce nello spazio dei codici a causa della sua origine nei codici delle schede perforate. Le diverse code page EBCDIC supportano lingue e regioni differenti; EBCDIC 037 è la variante più comune per Stati Uniti e Canada.
Esempi EBCDIC vs ASCII:
Mappature dei caratteri (EBCDIC 037): Carattere | ASCII | EBCDIC ----------|-------|-------- Spazio | 0x20 | 0x40 A | 0x41 | 0xC1 B | 0x42 | 0xC2 0 | 0x30 | 0xF0 1 | 0x31 | 0xF1 a | 0x61 | 0x81 b | 0x62 | 0x82 "ABC" in ASCII: 41 42 43 "ABC" in EBCDIC: C1 C2 C3 "123" in ASCII: 31 32 33 "123" in EBCDIC: F1 F2 F3
Perché usare EBCDIC:
- ▸Richiesto negli ambienti mainframe IBM
- ▸Compatibilità con sistemi legacy
- ▸Progetti di migrazione dei dati
- ▸Sviluppo COBOL e mainframe
- ▸Conservazione dei dati storici
>> domande frequenti
Che cos’è EBCDIC?
EBCDIC (Extended Binary Coded Decimal Interchange Code) è una codifica di caratteri a 8 bit sviluppata da IBM nel 1963. È utilizzata principalmente sui sistemi mainframe e midrange IBM. A differenza di ASCII, la disposizione dei caratteri EBCDIC riflette l’eredità delle schede perforate.
Perché EBCDIC è diverso da ASCII?
EBCDIC si è evoluto dai codici delle schede perforate, in cui fori in posizioni specifiche rappresentavano i caratteri. Ciò ha portato a una disposizione non contigua: le lettere non sono sequenziali e ci sono spazi tra i gruppi di lettere. ASCII, invece, è stato progettato da zero per l’efficienza, risultando più logico per l’informatica moderna.
Cosa sono le code page EBCDIC?
EBCDIC include diverse varianti chiamate code page per lingue e regioni differenti. Tra le più comuni troviamo: EBCDIC 037 (USA/Canada), EBCDIC 500 (internazionale), EBCDIC 875 (greco) ed EBCDIC 1047 (Open Systems). Ogni code page mappa i caratteri in modo diverso per soddisfare le esigenze locali.
Dove si usa ancora EBCDIC?
EBCDIC è ancora ampiamente utilizzato negli ambienti mainframe IBM (z/OS, z/VM, z/VSE), nei sistemi bancari e finanziari, nei sistemi legacy governativi e nelle applicazioni COBOL. Molte organizzazioni mantengono sistemi EBCDIC per processi aziendali critici che funzionano in modo affidabile da decenni.
// Corrispondenza ASCII ↔ EBCDIC (CP037)
| Carattere | 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 nel codice e da riga di comando
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")
>> Altre domande
D: Perché le lettere A–Z non formano un blocco continuo in EBCDIC?
R: EBCDIC deriva dalle zone delle schede perforate: A–I in C1–C9, J–R in D1–D9, S–Z in E2–E9, con lacune in mezzo. Per questo non si converte con una semplice somma.
D: Quale code page devo scegliere?
R: Le più comuni sono CP037 (USA/Canada), CP500 (internazionale) e CP1047 (z/OS Unix). Differiscono soprattutto per segni come [ ] ^ ! |. Scegli quella con cui sono stati prodotti i dati.
D: Che fine fanno i ritorni a capo nella conversione?
R: I file mainframe hanno spesso record a lunghezza fissa senza a capo; i caratteri di fine riga (LF/NEL) si trovano in posizioni diverse a seconda della code page (ad es. LF = 25 in CP037). Controllali dopo la conversione.