EBCDIC
EBCDIC (расшифровывается как Extended Binary Coded Decimal Interchange Code, расширенный двоично-десятичный код обмена информацией) — это 8-битная система кодирования символов, разработанная корпорацией IBM. Она была создана в 1963—1964 годах для использования на мейнфреймах и периферийном оборудовании IBM, став одной из первых широко распространённых компьютерных кодировок, наряду с ASCII (American Standard Code for Information Interchange). В отличие от ASCII, который основан на 7-битном коде, EBCDIC использует полный байт (8 бит), что позволяет кодировать до 256 различных символов. Несмотря на свою историческую важность, EBCDIC в значительной степени устарел и используется преимущественно в унаследованных (legacy) системах, особенно на мейнфреймах IBM (например, z/OS, OS/390, VSE) и в некоторых системах IBM i (ранее AS/400).
История
Предпосылки создания
До появления EBCDIC IBM использовала несколько проприетарных и несовместимых кодировок для своих различных линеек компьютеров и периферийных устройств. Самым известным предшественником был 6-битный код BCD (Binary Coded Decimal), который использовался в ранних мейнфреймах, таких как IBM 1401. BCD мог кодировать только 64 символа (заглавные буквы, цифры и некоторые знаки препинания), что было недостаточно для обработки текстов на разных языках и для поддержки строчных букв.
Разработка и внедрение
В 1964 году IBM представила семейство мейнфреймов System/360, которое должно было стать универсальной платформой для научных и коммерческих вычислений. Для обеспечения единого интерфейса для всех моделей System/360 требовалась новая, расширенная система кодирования. Так появился EBCDIC. Разработчики стремились сохранить обратную совместимость с BCD, поэтому коды для цифр и заглавных букв в EBCDIC были расположены в тех же позициях, что и в BCD, но с добавлением ведущего бита (1111 для цифр, 1100 и 1101 для букв). Это привело к неинтуитивному расположению символов в таблице, в отличие от ASCII, где коды расположены логически последовательно.
Конкуренция с ASCII
В то же время, в США активно развивался стандарт ASCII, который был принят в 1963 году. ASCII был 7-битным, что было достаточно для английского языка и основных управляющих символов. IBM, как доминирующий производитель компьютеров, продвигала EBCDIC как свой корпоративный стандарт. Однако, по мере распространения мини-компьютеров и, позже, персональных компьютеров, не связанных с IBM, ASCII стал доминирующим стандартом для обмена данными. Попытки IBM унифицировать кодировки (например, создание кодовой страницы 037, которая была совместима с ASCII для некоторых символов) не смогли изменить ситуацию. К 1970-м годам ASCII стал де-факто стандартом для большинства компьютерных систем, за исключением мейнфреймов IBM.
Кодировка и структура
Основные принципы
EBCDIC является 8-битной кодировкой, что означает, что каждый символ представлен одним байтом (8 бит). Это даёт 256 возможных кодовых позиций (от 0x00 до 0xFF). Однако, в отличие от ASCII, где коды расположены в логическом порядке (цифры 0—9 расположены последовательно, заглавные буквы A—Z — последовательно), в EBCDIC порядок нарушен. Это связано с его происхождением от BCD.
Зоны и цифры
В EBCDIC каждый символ состоит из двух частей: зоны (первые 4 бита) и цифры (последние 4 бита). Для цифр зона всегда равна 1111 (F в шестнадцатеричной системе). Например, цифра «1» кодируется как 0xF1 (1111 0001), а цифра «9» как 0xF9 (1111 1001). Для заглавных букв зона равна 1100 (C) или 1101 (D). Например, буква «A» кодируется как 0xC1 (1100 0001), а «B» как 0xC2. Строчные буквы имеют зону 1000 (8) или 1001 (9). Например, «a» — 0x81, «b» — 0x82.
Нелинейность и пробелы
Одним из главных недостатков EBCDIC является отсутствие непрерывных последовательностей для алфавита. В ASCII буквы A-Z и a-z расположены последовательно, что упрощает сортировку и сравнение. В EBCDIC между буквами «I» и «J» (0xC9 и 0xD1) есть разрыв, а между «R» и «S» (0xD9 и 0xE2) — ещё больший. Это создаёт проблемы при сортировке текстов (коллации), если не используются специальные алгоритмы. Кроме того, в EBCDIC существует несколько кодов для пробела (0x40 — основной, а также 0x41, 0x42 и другие), что может приводить к ошибкам при обработке текста.
Кодовые страницы
Поскольку EBCDIC является 8-битной кодировкой, для поддержки различных языков и наборов символов (например, кириллицы, латиницы с диакритическими знаками, азиатских языков) IBM разработала множество кодовых страниц (code pages). Каждая кодовая страница определяет, какой символ соответствует каждому из 256 кодов. Наиболее известные кодовые страницы EBCDIC:
- Code Page 037 (CP037): Используется в США, Канаде, Нидерландах, Португалии, Бразилии, Австралии, Новой Зеландии. Включает латиницу, цифры, знаки препинания и некоторые специальные символы.
- Code Page 500 (CP500): Международная версия, используемая в большинстве стран Европы, включая Россию (для кириллицы).
- Code Page 1025 (CP1025): Специализированная кодовая страница для кириллицы (русский, украинский, белорусский).
- Code Page 1047 (CP1047): Используется в системах IBM z/OS для поддержки латиницы 1 (ISO 8859-1).
- Code Page 1140 (CP1140): Версия CP037 с поддержкой символа евро (€).
Применение
Мейнфреймы IBM
Основная область применения EBCDIC — операционные системы для мейнфреймов IBM, такие как z/OS, z/VSE, z/TPF, а также система IBM i (ранее OS/400). В этих системах EBCDIC используется для хранения данных, работы с файлами, передачи данных через терминалы (3270) и для внутреннего представления текста в программах, написанных на COBOL, PL/I, Assembler и других языках. Многие утилиты и приложения, работающие на мейнфреймах, по умолчанию ожидают данные в EBCDIC.
Периферийное оборудование
EBCDIC также использовался в принтерах, перфораторах карт, терминалах и другом периферийном оборудовании IBM. Например, принтеры IBM 1403 и терминалы IBM 3270 использовали EBCDIC для обмена данными с мейнфреймом.
Унаследованные системы
Несмотря на то, что EBCDIC считается устаревшим, он продолжает активно использоваться в корпоративных системах, где работают критически важные приложения, написанные десятилетия назад. Миграция таких систем с EBCDIC на ASCII или Unicode (UTF-8) является сложной и дорогостоящей задачей, поэтому многие компании предпочитают сохранять EBCDIC в целях совместимости.
Проблемы и критика
Несовместимость с ASCII
Основная проблема EBCDIC — его полная несовместимость с ASCII, который стал мировым стандартом. Это приводит к необходимости конвертации данных при передаче между системами. Конвертация требует дополнительных вычислительных ресурсов и может приводить к ошибкам, особенно при работе с текстами, содержащими специальные символы или символы из разных кодовых страниц.
Сложность сортировки
Как уже упоминалось, нелинейное расположение символов в EBCDIC делает сортировку текстов (коллацию) нетривиальной задачей. Для правильной сортировки необходимо использовать специальные таблицы сравнения (collating sequences), которые учитывают порядок символов в EBCDIC. В ASCII сортировка обычно выполняется простым сравнением кодов символов.
Ограниченный набор символов
Хотя EBCDIC является 8-битной кодировкой, её стандартные кодовые страницы часто не включают все необходимые символы для современных языков (например, символ евро, некоторые математические символы, символы валют). Для решения этой проблемы IBM создала множество кодовых страниц, но это привело к фрагментации и усложнению обмена данными.
Отсутствие поддержки Unicode
EBCDIC не поддерживает Unicode напрямую. Для работы с Unicode на мейнфреймах IBM используются специальные методы, такие как UTF-16 или UTF-8, но они требуют дополнительной обработки и конвертации. Многие современные приложения, написанные для мейнфреймов, по-прежнему используют EBCDIC, что ограничивает их возможности по обработке текстов на разных языках.
Современное состояние
Постепенное вытеснение
С развитием технологий и распространением Unicode (UTF-8) EBCDIC постепенно вытесняется. Современные мейнфреймы IBM поддерживают Unicode, и многие новые приложения разрабатываются с использованием UTF-8. Однако, огромное количество унаследованных данных и программного обеспечения (особенно в банковской сфере, страховании, государственных учреждениях) по-прежнему используют EBCDIC.
Конвертация и миграция
Для обмена данными между системами, использующими EBCDIC, и системами, использующими ASCII/Unicode, применяются специальные программы-конвертеры, такие как iconv (доступен в Unix-подобных системах), утилиты IBM (например, iconv в z/OS), а также встроенные функции в языках программирования (например, в COBOL или Java). Миграция унаследованных систем на Unicode — сложный и дорогостоящий процесс, который может занять годы.
Поддержка в современных системах
Большинство современных операционных систем (Windows, Linux, macOS) имеют встроенную поддержку EBCDIC для чтения и записи файлов, созданных на мейнфреймах. Однако, использование EBCDIC в качестве основной кодировки для новых проектов не рекомендуется из-за его недостатков и несовместимости с современными стандартами.
Интересные факты
- Происхождение названия: Название EBCDIC было придумано как расширение для BCDIC (Binary Coded Decimal Interchange Code), который использовался в ранних компьютерах IBM.
- Парадокс с ASCII: По иронии судьбы, IBM, создавшая EBCDIC, также была одним из главных разработчиков стандарта ASCII. ASCII был создан Американским национальным институтом стандартов (ANSI) при активном участии инженеров IBM.
- Код для пробела: В EBCDIC пробел имеет код 0x40, что соответствует символу «@» в ASCII. Это часто приводит к путанице при конвертации.
- Код для «0»: В EBCDIC цифра «0» кодируется как 0xF0, что в ASCII соответствует символу «ð» (eth). Это также может вызывать ошибки при неправильной конвертации.
- Использование в COBOL: Язык программирования COBOL, широко используемый на мейнфреймах, изначально был разработан с учётом EBCDIC. Многие конструкции COBOL (например,
PICTUREдля описания данных) ориентированы на работу с EBCDIC.
Источники
- IBM Corporation. IBM System/360 Operating System: System Control Blocks. 1965.
- IBM Corporation. z/OS V2R4.0 Unicode Services. 2020.
- Mackenzie, Charles E. Coded Character Sets: History and Development. Addison-Wesley, 1980.
- International Organization for Standardization. ISO/IEC 646:1991 — Information technology — ISO 7-bit coded character set for information interchange.
- The Unicode Consortium. The Unicode Standard, Version 15.0. 2022.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →