converter | codificar | mainframe

> ebcdic | ibm | legado <

// EBCDIC - Extended Binary Coded Decimal Interchange Code

0 caracteres
0 caracteres
[MAINFRAME]

Mainframe IBM

Codificação de caracteres padrão para sistemas mainframe IBM.

[CODE PAGES]

Várias variantes

Suporte a diferentes páginas de código EBCDIC e configurações regionais.

[LEGACY]

Suporte a legado

Essencial para trabalhar com dados legados de mainframe.

>> informações técnicas

Como o EBCDIC funciona:

EBCDIC (Extended Binary Coded Decimal Interchange Code) é uma codificação de caracteres de 8 bits desenvolvida pela IBM. Diferentemente do ASCII, que agrupa caracteres relacionados, o EBCDIC os distribui ao longo de todo o espaço de códigos devido à sua origem em cartões perfurados. Diferentes páginas de código EBCDIC dão suporte a vários idiomas e regiões; o EBCDIC 037 é a variante mais comum para os EUA e o Canadá.

Exemplos EBCDIC vs ASCII:

Mapeamento de caracteres (EBCDIC 037):

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

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

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

Por que usar EBCDIC:

  • ▸Necessário em ambientes de mainframe IBM
  • ▸Compatibilidade com sistemas legados
  • ▸Projetos de migração de dados
  • ▸Desenvolvimento em COBOL e mainframe
  • ▸Preservação de dados históricos

>> perguntas frequentes

O que é EBCDIC?

EBCDIC (Extended Binary Coded Decimal Interchange Code) é uma codificação de caracteres de 8 bits desenvolvida pela IBM em 1963. É usada principalmente em sistemas mainframe e midrange da IBM. Diferentemente do ASCII, a disposição dos caracteres em EBCDIC reflete sua herança dos cartões perfurados.

Por que o EBCDIC é diferente do ASCII?

O EBCDIC evoluiu a partir de códigos de cartões perfurados, nos quais furos em posições específicas representavam caracteres. Isso resultou em uma disposição não contígua — as letras não são sequenciais e há lacunas entre grupos de letras. O ASCII foi projetado do zero pensando na eficiência, sendo portanto mais lógico para a computação moderna.

O que são páginas de código EBCDIC?

O EBCDIC possui várias variantes chamadas páginas de código para diferentes idiomas e regiões. Exemplos comuns incluem: EBCDIC 037 (EUA/Canadá), EBCDIC 500 (internacional), EBCDIC 875 (grego) e EBCDIC 1047 (Open Systems). Cada página de código mapeia os caracteres de forma diferente para atender às necessidades locais.

Onde o EBCDIC ainda é usado?

O EBCDIC ainda é amplamente utilizado em ambientes mainframe IBM (z/OS, z/VM, z/VSE), em sistemas bancários e financeiros, em sistemas governamentais legados e em aplicações COBOL. Muitas organizações mantêm sistemas EBCDIC para processos de negócio críticos que funcionam de forma confiável há décadas.

// Mapeamento ASCII ↔ EBCDIC (CP037)

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

// EBCDIC no código e na linha de 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")

>> Mais perguntas

P: Por que as letras A–Z não formam um bloco contínuo em EBCDIC?

R: O EBCDIC vem das zonas dos cartões perfurados: A–I em C1–C9, J–R em D1–D9, S–Z em E2–E9, com lacunas entre elas. Por isso não se converte com uma simples soma.

P: Qual página de código devo escolher?

R: As mais comuns são CP037 (EUA/Canadá), CP500 (internacional) e CP1047 (z/OS Unix). Elas diferem sobretudo em sinais como [ ] ^ ! |. Escolha a que gerou os dados.

P: O que acontece com as quebras de linha na conversão?

R: Arquivos de mainframe costumam ter registros de tamanho fixo sem quebra de linha; os caracteres de fim de linha (LF/NEL) ficam em posições diferentes conforme a página de código (p. ex. LF = 25 no CP037). Verifique-os após converter.

Outros idiomas