Расширенный двоично - десятичный код обмена [1] [2] ( EBCDIC ; [1] / ˈɛbsɪdɪk / ) — восьмибитная кодировка символов , используемая в основном в операционных системах мэйнфреймов IBM и компьютеров среднего класса IBM . Она произошла от кода, используемого с перфокартами , и соответствующего шестибитного двоично-десятичного кода, использовавшегося в большинстве периферийных устройств компьютеров IBM в конце 1950 - х и начале 1960-х годов. [3] Она поддерживается различными платформами не-IBM, такими как Fujitsu-Siemens ' BS2000/OSD , OS-IV, MSP и MSP-EX, серия SDS Sigma , Unisys VS/9 , Unisys MCP и ICL VME .
EBCDIC был разработан в 1963 и 1964 годах компанией IBM и был анонсирован с выпуском линейки мэйнфреймов IBM System/360 . Это восьмибитная кодировка символов, разработанная отдельно от семибитной схемы кодирования ASCII . Она была создана для расширения существующего двоично-десятичного (BCD) кода обмена, или BCDIC , который сам по себе был разработан как эффективное средство кодирования двух зонных и числовых перфораций на перфокартах в шесть бит. Отдельное кодирование «s» и «S» (использование позиции 2 вместо 1) сохранилось из перфокарт, где было желательно не располагать перфорации слишком близко друг к другу, чтобы гарантировать целостность физической карты. [4] [ неудачная проверка ]
Хотя IBM была главным сторонником комитета по стандартизации ASCII, [5] у компании не было времени подготовить периферийные устройства ASCII (например, перфокарты) для поставки с компьютерами System/360, поэтому компания остановилась на EBCDIC. [3] System/360 стала невероятно успешной вместе с такими клонами, как RCA Spectra 70 , ICL System 4 и Fujitsu FACOM, а значит, и EBCDIC.
Все операционные системы мэйнфреймов IBM и ее операционная система IBM i для компьютеров среднего уровня используют EBCDIC в качестве своей собственной кодировки [6] (например, с допуском для ASCII, ISPF в z/OS может просматривать и редактировать файлы, закодированные как EBCDIC, так и ASCII). Программное обеспечение может переводить в кодировки и из них, а современные мэйнфреймы (например, IBM Z ) включают инструкции процессора на аппаратном уровне для ускорения перевода между наборами символов.
Существует EBCDIC-ориентированный формат преобразования Unicode, называемый UTF-EBCDIC , предложенный Unicode Consortium , разработанный для обеспечения простого обновления программного обеспечения EBCDIC для обработки Unicode , но не предназначенный для использования в открытых средах обмена. Даже в системах с обширной поддержкой EBCDIC он не стал популярным. Например, z/OS поддерживает Unicode (предпочитая именно UTF-16 ), но z/OS имеет лишь ограниченную поддержку UTF-EBCDIC.
Не все операционные системы, работающие на оборудовании IBM, используют EBCDIC; IBM AIX , Linux на IBM Z и Linux на Power используют ASCII, как и все операционные системы, работающие на персональном компьютере IBM и его последователях.
Написание программного обеспечения, работающего как в ASCII, так и в EBCDIC, сопряжено с многочисленными трудностями.
for (c = 'A'; c <= 'Z'; ++c) putchar(c);
Существуют сотни кодовых страниц EBCDIC, основанных на оригинальной кодировке символов EBCDIC; существует множество кодовых страниц EBCDIC , предназначенных для использования в разных частях света, включая кодовые страницы для нелатинских алфавитов, таких как китайский, японский (например, EBCDIC 930, JEF и KEIS), корейский и греческий (EBCDIC 875). Существует также огромное количество вариаций с буквами, переставленными местами без видимой причины. [ необходима цитата ]
В таблице ниже показано «инвариантное подмножество» [9] EBCDIC, которое представляет собой символы, которые должны иметь одинаковые назначения на всех кодовых страницах EBCDIC, использующих латинский алфавит. (Сюда входит большая часть инвариантного репертуара ISO/IEC 646 , за исключением восклицательного знака .) Также показаны (серым цветом) отсутствующие знаки препинания ASCII и EBCDIC, расположенные там, где они находятся в кодовой странице 37 (один из вариантов кодовой страницы EBCDIC). Пустые ячейки заполнены регионально-специфичными символами в вариантах, но символы серого цвета также часто меняются местами или заменяются. Как и ASCII, инвариантное подмножество работает только для языков, использующих базовый латинский алфавит ISO , таких как английский (исключая заимствованные слова и некоторые необычные орфографические вариации) и голландский (если лигатуры «ij» и «IJ» написаны как два символа).
Ниже приведены определения управляющих символов EBCDIC, которые либо не отображаются на управляющие символы ASCII , либо имеют дополнительные применения. При отображении в Unicode они в основном отображаются на кодовые точки управляющих символов C1 способом, указанным в IBM's Character Data Representation Architecture (CDRA). [10] [11]
Хотя отображение по умолчанию символа новой строки (NL) соответствует символу следующей строки (NEL) ISO/IEC 6429 (поведение которого также указано, но не обязательно, в Приложении 14 к Unicode), [12] большинство этих отображенных в C1 элементов управления не соответствуют ни элементам в наборе C1 ISO/IEC 6429 , ни элементам в других зарегистрированных наборах элементов управления C1, таких как ISO 6630. [13] Хотя это фактически делает элементы управления EBCDIC, не входящие в ASCII, уникальным набором элементов управления C1, они не входят в число наборов элементов управления C1, зарегистрированных в реестре ISO-IR , [14] что означает, что им не назначена последовательность обозначения набора элементов управления (как указано в ISO/IEC 2022 и опционально разрешено в ISO/IEC 10646 (Unicode)). [15]
За исключением U+0085 (следующая строка), стандарт Unicode не предписывает интерпретацию управляющих символов C1, оставляя их интерпретацию протоколам более высокого уровня (он предлагает, но не требует, их интерпретации ISO/IEC 6429 при отсутствии использования для других целей) [16] , поэтому это отображение допустимо в Unicode, но не определено им.
Следующие кодовые страницы имеют полный набор символов Latin-1 (ISO/IEC 8859-1). В первом столбце указан исходный номер кодовой страницы. Во втором столбце указан номер кодовой страницы, обновленной со знаком евро (€), заменяющим универсальный знак валюты (¤) (или в случае EBCDIC 924, с набором, измененным для соответствия ISO 8859-15 )
Разные страны имеют разные кодовые страницы, поскольку эти кодовые страницы изначально были кодовыми страницами с наборами символов, специфичными для каждой страны, и позднее были расширены, чтобы содержать весь набор ISO 8859-1, что означает, что заданный символ ISO 8859-1 может иметь разные значения кодовых точек в разных кодовых страницах. Они известны как Country Extended Code Pages ( CECP ). [20]
Сторонник и разработчик программного обеспечения с открытым исходным кодом Эрик С. Рэймонд пишет в своем Жаргонном файле , что EBCDIC ненавидели хакеры, под которыми он подразумевал [21] членов субкультуры энтузиастов-программистов. Жаргонный файл 4.4.7 дает следующее определение: [22]
EBCDIC: /eb´s@·dik/, /eb´see`dik/, /eb´k@·dik/, сущ. [аббревиатура, Extended Binary Coded Decimal Interchange Code] Предполагаемый набор символов, использовавшийся на динозаврах IBM. Существует по крайней мере в шести взаимно несовместимых версиях, все из которых обладают такими прелестями, как несмежная последовательность букв и отсутствие нескольких знаков препинания ASCII, довольно важных для современных компьютерных языков (какие именно символы отсутствуют, зависит от того, какую версию EBCDIC вы смотрите). IBM адаптировала EBCDIC из кода перфокарт в начале 1960-х и обнародовала его как тактику контроля со стороны клиентов (см. заговор коннекторов ), отвергнув уже устоявшийся стандарт ASCII. Сегодня IBM заявляет, что является компанией открытых систем , но собственное описание IBM вариантов EBCDIC и того, как конвертировать между ними, по-прежнему является совершенно секретным для внутреннего использования, сжигать перед прочтением. Хакеры бледнеют от одного названия EBCDIC и считают его проявлением чистейшего зла.
— Файл жаргона 4.4.7
Дизайн EBCDIC также был источником многих шуток. Одна из таких шуток, найденная в файле Unix fortune 4.3BSD Reno (1990) [23] , гласила:
Профессор: «Итак, американское правительство обратилось в IBM, чтобы разработать стандарт шифрования , и они придумали...»
Студент: «EBCDIC!»
Ссылки на набор символов EBCDIC сделаны в серии компьютерных игр Zork 1979 года . В «Машинном зале» в Zork II EBCDIC используется для обозначения непонятного языка:
Это большая комната, полная разной тяжелой техники, которая шумно жужжит. В комнате пахнет горелыми резисторами. Вдоль одной стены расположены три кнопки, которые соответственно круглые, треугольные и квадратные. Естественно, над этими кнопками находятся инструкции, написанные на EBCDIC...
В 2021 году стало известно, что бельгийский банк в 2019 году все еще использовал EBCDIC внутри компании. Клиент настаивал на том, что правильное написание его фамилии включало умлаут , который банк пропустил, и клиент подал жалобу, ссылаясь на гарантию в Общем регламенте по защите данных права на своевременное «исправление неточных персональных данных». Аргумент банка включал тот факт, что их система использовала EBCDIC, а также то, что она не поддерживала буквы с диакритическими знаками (или строчные буквы, если на то пошло). Апелляционный суд вынес решение в пользу клиента. [24] [25]
...но их принтеры и перфораторы не были готовы к обработке ASCII, и IBM просто ДОЛЖНА была объявить об этом.
64 управляющих символа... символ ASCII DELETE (U+007F)... отображаются в соответствии с соглашениями EBCDIC, как определено в IBM Character Data Representation Architecture, CDRA, с одним исключением — пары управляющих символов перевода строки EBCDIC и новой строки заменяются парами CDRA по умолчанию на управляющие символы перевода строки (U+000A) и следующей строки (U+0085) ISO/IEC 6429
{{citation}}
: CS1 maint: numeric names: authors list (link)Для других наборов C0 или C1 последний октет F должен быть получен из Международного регистра наборов кодированных символов... Если такая управляющая последовательность появляется в последовательности кодовых единиц, соответствующей настоящему международному стандарту, она должна быть дополнена в соответствии с разделом 11.
{{citation}}
: CS1 maint: numeric names: authors list (link)Мнемоника для управляющего символа начала значения в EBCDIC была изменена, чтобы включить точку (.) в конце (SOS.). Это было сделано для того, чтобы отличить ее от мнемоники SOS, используемой в ISO-8 для управляющего символа начала строки. Точка никак не изменяет свойство элемента управления.