> ebcdic | ibm | legado <
// EBCDIC - Extended Binary Coded Decimal Interchange Code
Mainframe IBM
Codificación de caracteres estándar para sistemas mainframe de IBM.
Múltiples variantes
Soporte para distintas páginas de códigos y configuraciones regionales EBCDIC.
Compatibilidad heredada
Esencial para trabajar con datos heredados de mainframe.
>> información técnica
Cómo funciona EBCDIC:
EBCDIC (Extended Binary Coded Decimal Interchange Code) es una codificación de caracteres de 8 bits desarrollada por IBM. A diferencia de ASCII, que agrupa caracteres relacionados, EBCDIC los distribuye por todo el espacio de códigos debido a su origen en tarjetas perforadas. Las diferentes páginas de códigos EBCDIC soportan varios idiomas y regiones, siendo EBCDIC 037 la más común en EE. UU. y Canadá.
Ejemplos EBCDIC vs ASCII:
Mapeos de caracteres (EBCDIC 037): Carácter | ASCII | EBCDIC ---------|-------|-------- Espacio | 0x20 | 0x40 A | 0x41 | 0xC1 B | 0x42 | 0xC2 0 | 0x30 | 0xF0 1 | 0x31 | 0xF1 a | 0x61 | 0x81 b | 0x62 | 0x82 "ABC" en ASCII: 41 42 43 "ABC" en EBCDIC: C1 C2 C3 "123" en ASCII: 31 32 33 "123" en EBCDIC: F1 F2 F3
Por qué usar EBCDIC:
- ▸Requerido en entornos mainframe IBM
- ▸Compatibilidad con sistemas heredados
- ▸Proyectos de migración de datos
- ▸Desarrollo en COBOL y mainframe
- ▸Preservación de datos históricos
>> preguntas frecuentes
¿Qué es EBCDIC?
EBCDIC (Extended Binary Coded Decimal Interchange Code) es una codificación de caracteres de 8 bits desarrollada por IBM en 1963. Se utiliza principalmente en sistemas mainframe y de gama media de IBM. A diferencia de ASCII, la disposición de caracteres de EBCDIC refleja su herencia de las tarjetas perforadas.
¿Por qué EBCDIC es diferente de ASCII?
EBCDIC evolucionó a partir de códigos de tarjetas perforadas, donde perforaciones en posiciones concretas representaban caracteres. Esto dio lugar a una disposición no contigua: las letras no son secuenciales y hay huecos entre grupos de letras. ASCII, en cambio, se diseñó desde cero para ser eficiente, por lo que es más lógico para la informática moderna.
¿Qué son las páginas de códigos EBCDIC?
EBCDIC tiene varias variantes llamadas páginas de códigos para distintos idiomas y regiones. Entre las más comunes están: EBCDIC 037 (EE. UU./Canadá), EBCDIC 500 (internacional), EBCDIC 875 (griego) y EBCDIC 1047 (Open Systems). Cada página de códigos asigna los caracteres de forma distinta para adaptarse a las necesidades locales.
¿Dónde se sigue usando EBCDIC?
EBCDIC sigue utilizándose ampliamente en entornos mainframe de IBM (z/OS, z/VM, z/VSE), en sistemas bancarios y financieros, sistemas gubernamentales heredados y aplicaciones COBOL. Muchas organizaciones mantienen sistemas EBCDIC para procesos críticos de negocio que llevan funcionando de forma fiable durante décadas.
// Correspondencia ASCII ↔ EBCDIC (CP037)
| Carácter | 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 en código y en la línea de comandos
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")
>> Más preguntas
P: ¿Por qué las letras A–Z no forman un bloque continuo en EBCDIC?
R: EBCDIC procede de las zonas de las tarjetas perforadas: A–I en C1–C9, J–R en D1–D9, S–Z en E2–E9, con huecos entre ellas. Por eso no se convierten con una simple suma.
P: ¿Qué página de códigos debo elegir?
R: Las más comunes son CP037 (EE. UU./Canadá), CP500 (internacional) y CP1047 (z/OS Unix). Difieren sobre todo en signos como [ ] ^ ! |. Elige la que generó los datos.
P: ¿Qué pasa con los saltos de línea al convertir?
R: Los archivos de mainframe suelen tener registros de longitud fija sin salto de línea; los caracteres de fin de línea (LF/NEL) están en posiciones distintas según la página de códigos (p. ej. LF = 25 en CP037). Revísalos tras convertir.