Открыть сервисСервис

CP437

CP437 (Code Page 437, также известная как OEM-US, IBM PC OEM, MS-DOS OEM) — это однобайтовая кодовая страница (набор символов), разработанная корпорацией IBM в 1981 году для использования в персональных компьютерах IBM PC. Она стала первой стандартной кодовой страницей для текстового режима IBM PC и операционной системы MS-DOS, заложив основу для отображения текста и псевдографики на ранних компьютерах.

История

Разработка и стандартизация

Создание CP437 было обусловлено необходимостью отображения текста и символов на монохромных и цветных дисплеях IBM PC, которые работали в текстовом режиме с разрешением 80×25 символов. В отличие от более ранних систем, использовавших 7-битный ASCII (128 символов), IBM решила использовать 8-битную кодировку (256 символов), чтобы включить в неё дополнительные знаки: буквы национальных алфавитов, математические символы и элементы псевдографики.

Разработкой занималась группа инженеров IBM под руководством Дэвида Брэдли. В 1981 году CP437 была представлена вместе с IBM PC (модель 5150). Она стала основной кодовой страницей для MS-DOS, разработанной Microsoft, и оставалась таковой до середины 1990-х годов.

Распространение и влияние

CP437 получила широкое распространение благодаря доминированию IBM PC и совместимых с ними компьютеров, а также операционных систем MS-DOS и PC DOS. Она использовалась во всех программах, работающих в текстовом режиме: текстовых редакторах (например, Norton Editor, WordStar), электронных таблицах (Lotus 1-2-3), играх (Doom, Wolfenstein 3D), файловых менеджерах (Norton Commander, Volkov Commander) и системных утилитах.

С появлением Windows 95 и переходом на графические интерфейсы, а также с распространением Unicode, CP437 постепенно утратила своё значение. Однако она остаётся важной для совместимости с устаревшим программным обеспечением, эмуляторами DOS и некоторыми встроенными системами.

Структура и классификация

Диапазоны символов

CP437 представляет собой 8-битную кодовую страницу, где каждый символ кодируется одним байтом (0–255). Символы делятся на три основные группы:

  • 0–31 (управляющие символы): Зарезервированы для управления терминалом и устройствами ввода-вывода. Включают такие коды, как 0 (NUL), 7 (BEL), 10 (LF), 13 (CR). В текстовом режиме IBM PC эти коды не отображались как символы, а использовались для управления курсором, звуком и другими функциями.
  • 32–126 (печатные символы ASCII): Соответствуют стандартному 7-битному ASCII. Включают латинские буквы (A–Z, a–z), цифры (0–9), знаки препинания и специальные символы (пробел, точка, запятая, скобки и т.д.).
  • 127–255 (расширенная часть): Содержит дополнительные символы, отсутствующие в ASCII. К ним относятся:
  • Псевдографика (символы № 176–223): Набор из 48 символов, предназначенных для рисования рамок, линий, углов, теней и других элементов в текстовом режиме. Они позволяли создавать простые графические интерфейсы, таблицы и диаграммы без использования графического режима.
  • Математические символы (№ 224–238): Включают знаки операций (+, −, ×, ÷), греческие буквы (α, β, γ, π, Σ, Ω) и другие символы.
  • Буквы с диакритическими знаками (№ 128–175, 224–238): Содержат буквы для некоторых европейских языков: немецкого (ä, ö, ü, ß), французского (é, è, ê, ô), испанского (ñ, ¿, ¡) и других.
  • Символы валют (№ 156, 157, 158): Фунт стерлингов (£), иена (¥) и цент (¢).
  • Прочие символы: Знак градуса (°), символ параграфа (§), стрелки (←, ↑, →, ↓), музыкальные ноты (♪, ♫), символы для обозначения пола (♂, ♀) и другие.

Особенности кодировки

  • Псевдографика: Это ключевая особенность CP437. Символы псевдографики (линии, углы, перекрестья, тени) позволяли создавать в текстовом режиме элементы, имитирующие графику. Они были незаменимы для построения интерфейсов в программах, работающих в текстовом режиме, таких как Norton Commander.
  • Отсутствие кириллицы: CP437 не включает буквы кириллицы. Для русского языка использовались другие кодовые страницы, такие как CP866 (альтернативная кодировка) и CP1251 (Windows-1251). Однако в CP437 есть символы, которые могли использоваться для имитации кириллицы (например, символы с диакритическими знаками).
  • Нестандартные символы: Некоторые символы в CP437, такие как «♠», «♣», «♥», «♦» (карточные масти), «♪», «♫» (музыкальные ноты), являются уникальными для этой кодировки и не встречаются в других стандартных наборах символов.

Применение

Операционные системы и программы

CP437 была основной кодовой страницей для:

  • MS-DOS и PC DOS: Все версии этих операционных систем использовали CP437 для отображения текста в консоли.
  • Текстовые редакторы: Большинство текстовых редакторов для DOS (например, Norton Editor, WordStar, Multi-Edit) использовали CP437.
  • Файловые менеджеры: Norton Commander, Volkov Commander, FAR Manager (в режиме совместимости) — все они использовали псевдографику CP437 для построения интерфейса.
  • Игры: Многие игры для DOS, особенно ранние, использовали текстовый режим и псевдографику CP437 для отображения графики (например, Rogue, Nethack, Doom в текстовом режиме).
  • Системные утилиты: CHKDSK, FORMAT, DEBUG и другие утилиты DOS выводили информацию с использованием CP437.

Современное использование

Несмотря на устаревание, CP437 продолжает использоваться в следующих контекстах:

  • Эмуляторы DOS: Программы, эмулирующие среду DOS (например, DOSBox), по умолчанию используют CP437 для отображения текста.
  • Встроенные системы: Некоторые встроенные системы с ограниченными ресурсами продолжают использовать CP437 для отображения текста и псевдографики.
  • Ретро-вычисления: Энтузиасты, работающие с устаревшим оборудованием и программным обеспечением, используют CP437 для совместимости.
  • Текстовые интерфейсы: Некоторые современные программы (например, текстовые редакторы в консоли Linux, такие как Vim, Emacs) могут использовать CP437 для отображения символов, если это настроено.
  • Unicode: CP437 является одной из кодовых страниц, поддерживаемых стандартом Unicode. Символы CP437 имеют соответствующие коды в Unicode (U+0000–U+00FF).

Примеры символов CP437

Код (дес.)Код (шест.)СимволОписание
10x01☺Смайлик (белый)
20x02☻Смайлик (чёрный)
30x03♥Червовый туз
40x04♦Бубновый туз
50x05♣Трефовый туз
60x06♠Пиковый туз
70x07•Точка
80x08◘Точка в круге
90x09○Круг
100x0A◙Круг с точкой
110x0B♂Мужской символ
120x0C♀Женский символ
130x0D♪Музыкальная нота
140x0E♫Две музыкальные ноты
150x0F☼Солнце
160x10►Стрелка вправо
170x11◄Стрелка влево
180x12↕Стрелка вверх-вниз
190x13‼Двойной восклицательный знак
200x14Символ параграфа
210x15§Символ раздела
220x16▬Чёрный прямоугольник
230x17↨Стрелка вверх-вниз с основанием
240x18↑Стрелка вверх
250x19↓Стрелка вниз
260x1A→Стрелка вправо
270x1B←Стрелка влево
280x1C∟Прямой угол
290x1D↔Стрелка влево-вправо
300x1E▲Треугольник вверх
310x1F▼Треугольник вниз
1270x7F⌂Дом
1760xB0░Лёгкая тень
1770xB1▒Средняя тень
1780xB2▓Тёмная тень
1790xB3│Вертикальная линия
1800xB4┤Вертикальная линия с соединением вправо
1810xB5╡Двойная вертикальная линия с соединением вправо
1820xB6╢Двойная вертикальная линия с соединением влево
1830xB7╖Двойная вертикальная линия с соединением вниз
1840xB8╕Двойная вертикальная линия с соединением вверх
1850xB9╣Двойная вертикальная линия с двойным соединением
1860xBA║Двойная вертикальная линия
1870xBB╗Двойной правый верхний угол
1880xBC╝Двойной правый нижний угол
1890xBD╜Двойной левый нижний угол
1900xBE╛Двойной левый верхний угол
1910xBF┐Правый верхний угол
1920xC0└Левый нижний угол
1930xC1┴Пересечение линий сверху
1940xC2┬Пересечение линий снизу
1950xC3├Пересечение линий слева
1960xC4─Горизонтальная линия
1970xC5┼Пересечение линий
1980xC6╞Двойная горизонтальная линия с соединением влево
1990xC7╟Двойная горизонтальная линия с соединением вправо
2000xC8╚Двойной левый нижний угол
2010xC9╔Двойной левый верхний угол
2020xCA╩Двойное пересечение линий сверху
2030xCB╦Двойное пересечение линий снизу
2040xCC╠Двойное пересечение линий слева
2050xCD═Двойная горизонтальная линия
2060xCE╬Двойное пересечение линий
2070xCF╧Двойное пересечение линий сверху (одинарная внизу)
2080xD0╨Двойное пересечение линий снизу (одинарная вверху)
2090xD1╤Двойное пересечение линий сверху (одинарная слева)
2100xD2╥Двойное пересечение линий снизу (одинарная справа)
2110xD3╙Двойной левый нижний угол (одинарная вверху)
2120xD4╘Двойной правый нижний угол (одинарная вверху)
2130xD5╒Двойной левый верхний угол (одинарная внизу)
2140xD6╓Двойной правый верхний угол (одинарная внизу)
2150xD7╫Двойное пересечение линий (одинарная по диагонали)
2160xD8╪Двойное пересечение линий (одинарная по диагонали)
2170xD9┘Правый нижний угол
2180xDA┌Левый верхний угол
2190xDB█Полный блок
2200xDC▄Нижняя половина блока
2210xDD▌Левая половина блока
2220xDE▐Правая половина блока
2230xDF▀Верхняя половина блока
2240xE0αАльфа (греческая)
2250xE1ßЭсцет (немецкая)
2260xE2ΓГамма (греческая)
2270xE3πПи (греческая)
2280xE4ΣСигма (греческая)
2290xE5σСигма (строчная греческая)
2300xE6µМикро
2310xE7τТау (греческая)
2320xE8ΦФи (греческая)
2330xE9ΘТета (греческая)
2340xEAΩОмега (греческая)
2350xEBδДельта (греческая)
2360xEC∞Бесконечность
2370xEDφФи (строчная греческая)
2380xEEεЭпсилон (греческая)
2390xEF∩Пересечение множеств
2400xF0≡Тождественно равно
2410xF1±Плюс-минус
2420xF2≥Больше или равно
2430xF3≤Меньше или равно
2440xF4⌠Интеграл (верхняя часть)
2450xF5⌡Интеграл (нижняя часть)
2460xF6÷Деление
2470xF7≈Приблизительно равно
2480xF8°Градус
2490xF9∙Точка (средняя)
2500xFA·Точка (средняя)
2510xFB√Квадратный корень
2520xFCⁿСтепень n
2530xFD²Квадрат
2540xFE■Квадрат
2550xFFНеразрывный пробел

Критика и ограничения

  • Отсутствие кириллицы: CP437 не поддерживает кириллицу, что делало её непригодной для использования в русскоязычных системах без дополнительных модификаций. Для русского языка были разработаны отдельные кодовые страницы (CP866, CP1251).
  • Ограниченный набор символов: 256 символов недостаточно для поддержки всех языков мира. Это привело к созданию множества различных кодовых страниц для разных регионов.
  • Нестандартные символы: Некоторые символы CP437 (например, смайлики, карточные масти) не имеют стандартных аналогов в Unicode, что может вызывать проблемы при конвертации текста.
  • Устаревание: С переходом на Unicode и графические интерфейсы CP437 потеряла актуальность. Современные системы редко используют её для отображения текста.

Источники

  1. IBM Personal Computer Technical Reference Manual (1981).
  2. Microsoft MS-DOS Programmer's Reference (1988).
  3. Стандарт Unicode, версия 15.0.
  4. Документация по эмулятору DOSBox.
  5. Статья «Code page 437» в английской Википедии.
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru