конверсия | кодирование | мэйнфрейм

> ebcdic | ibm | наследие <

// EBCDIC - Extended Binary Coded Decimal Interchange Code

0 символов
0 символов
[MAINFRAME]

IBM мэйнфрейм

Стандартная кодировка символов для мэйнфрейм‑систем IBM.

[CODE PAGES]

Несколько вариантов

Поддержка различных кодовых страниц EBCDIC и языковых локалей.

[LEGACY]

Поддержка legacy‑систем

Необходимо для работы с данными старых мэйнфреймов.

>> техническая информация

Как работает EBCDIC:

EBCDIC (Extended Binary Coded Decimal Interchange Code) — это 8‑битная кодировка символов, разработанная компанией IBM. В отличие от ASCII, где родственные символы сгруппированы вместе, в EBCDIC символы распределены по всему диапазону кодов из‑за происхождения от кодов перфокарт. Различные кодовые страницы EBCDIC поддерживают разные языки и регионы; наиболее распространённой для США и Канады является EBCDIC 037.

Примеры: EBCDIC vs ASCII:

Отображение символов (EBCDIC 037):

Символ | ASCII | EBCDIC
-------|-------|--------
Пробел | 0x20  | 0x40
  A    | 0x41  | 0xC1
  B    | 0x42  | 0xC2
  0    | 0x30  | 0xF0
  1    | 0x31  | 0xF1
  a    | 0x61  | 0x81
  b    | 0x62  | 0x82

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

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

Зачем использовать EBCDIC:

  • ▸Требуется в средах IBM mainframe
  • ▸Совместимость с legacy‑системами
  • ▸Проекты по миграции данных
  • ▸Разработка на COBOL и для mainframe
  • ▸Сохранение исторических данных

>> часто задаваемые вопросы

Что такое EBCDIC?

EBCDIC (Extended Binary Coded Decimal Interchange Code) — 8‑битная кодировка символов, разработанная IBM в 1963 году. Она используется преимущественно в мэйнфрейм‑ и мидрейндж‑системах IBM. В отличие от ASCII, расположение символов в EBCDIC отражает наследие перфокарт.

Почему EBCDIC отличается от ASCII?

EBCDIC произошла от кодов перфокарт, где отверстия в определённых позициях представляли символы. Это привело к несмежному расположению — буквы идут не подряд, а между группами символов есть промежутки. ASCII, напротив, был спроектирован с нуля ради эффективности, поэтому более логичен для современных вычислений.

Что такое кодовые страницы EBCDIC?

EBCDIC имеет несколько вариантов, называемых кодовыми страницами, для разных языков и регионов. Распространённые примеры: EBCDIC 037 (США/Канада), EBCDIC 500 (международная), EBCDIC 875 (греческая) и EBCDIC 1047 (Open Systems). Каждая кодовая страница по‑своему сопоставляет символы, чтобы удовлетворять локальные требования.

Где EBCDIC используется сегодня?

EBCDIC по‑прежнему широко применяется в средах IBM mainframe (z/OS, z/VM, z/VSE), банковских и финансовых системах, государственных legacy‑системах и COBOL‑приложениях. Многие организации поддерживают EBCDIC‑системы для критически важных бизнес‑процессов, которые надёжно работают уже десятилетиями.

// Соответствие ASCII ↔ EBCDIC (CP037)

СимволASCIIEBCDIC (CP037)
A41C1
I49C9
J4AD1
R52D9
S53E2
Z5AE9
a6181
z7AA9
030F0
939F9
␠2040
.2E4B
!215A
\n0A25

// EBCDIC в коде и в командной строке

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")

>> Другие вопросы

В: Почему буквы A–Z в EBCDIC не образуют непрерывный блок?

О: EBCDIC происходит от зон перфокарт: A–I — C1–C9, J–R — D1–D9, S–Z — E2–E9, между ними есть пропуски. Поэтому перевод простым сложением невозможен.

В: Какую кодовую страницу выбрать?

О: Распространены CP037 (США/Канада), CP500 (международная) и CP1047 (z/OS Unix). Они различаются в основном знаками вроде [ ] ^ ! |. Выбирайте ту, в которой созданы данные.

В: Что происходит с переводами строк при конвертации?

О: Файлы мейнфреймов часто состоят из записей фиксированной длины без переводов строк; символы конца строки (LF/NEL) в разных кодовых страницах стоят по-разному (например, LF = 25 в CP037). Проверяйте их после конвертации.

Другие языки