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
| Код (дес.) | Код (шест.) | Символ | Описание |
|---|---|---|---|
| 1 | 0x01 | ☺ | Смайлик (белый) |
| 2 | 0x02 | ☻ | Смайлик (чёрный) |
| 3 | 0x03 | ♥ | Червовый туз |
| 4 | 0x04 | ♦ | Бубновый туз |
| 5 | 0x05 | ♣ | Трефовый туз |
| 6 | 0x06 | ♠ | Пиковый туз |
| 7 | 0x07 | • | Точка |
| 8 | 0x08 | ◘ | Точка в круге |
| 9 | 0x09 | ○ | Круг |
| 10 | 0x0A | ◙ | Круг с точкой |
| 11 | 0x0B | ♂ | Мужской символ |
| 12 | 0x0C | ♀ | Женский символ |
| 13 | 0x0D | ♪ | Музыкальная нота |
| 14 | 0x0E | ♫ | Две музыкальные ноты |
| 15 | 0x0F | ☼ | Солнце |
| 16 | 0x10 | ► | Стрелка вправо |
| 17 | 0x11 | ◄ | Стрелка влево |
| 18 | 0x12 | ↕ | Стрелка вверх-вниз |
| 19 | 0x13 | ‼ | Двойной восклицательный знак |
| 20 | 0x14 | ¶ | Символ параграфа |
| 21 | 0x15 | § | Символ раздела |
| 22 | 0x16 | ▬ | Чёрный прямоугольник |
| 23 | 0x17 | ↨ | Стрелка вверх-вниз с основанием |
| 24 | 0x18 | ↑ | Стрелка вверх |
| 25 | 0x19 | ↓ | Стрелка вниз |
| 26 | 0x1A | → | Стрелка вправо |
| 27 | 0x1B | ← | Стрелка влево |
| 28 | 0x1C | ∟ | Прямой угол |
| 29 | 0x1D | ↔ | Стрелка влево-вправо |
| 30 | 0x1E | ▲ | Треугольник вверх |
| 31 | 0x1F | ▼ | Треугольник вниз |
| 127 | 0x7F | ⌂ | Дом |
| 176 | 0xB0 | ░ | Лёгкая тень |
| 177 | 0xB1 | ▒ | Средняя тень |
| 178 | 0xB2 | ▓ | Тёмная тень |
| 179 | 0xB3 | │ | Вертикальная линия |
| 180 | 0xB4 | ┤ | Вертикальная линия с соединением вправо |
| 181 | 0xB5 | ╡ | Двойная вертикальная линия с соединением вправо |
| 182 | 0xB6 | ╢ | Двойная вертикальная линия с соединением влево |
| 183 | 0xB7 | ╖ | Двойная вертикальная линия с соединением вниз |
| 184 | 0xB8 | ╕ | Двойная вертикальная линия с соединением вверх |
| 185 | 0xB9 | ╣ | Двойная вертикальная линия с двойным соединением |
| 186 | 0xBA | ║ | Двойная вертикальная линия |
| 187 | 0xBB | ╗ | Двойной правый верхний угол |
| 188 | 0xBC | ╝ | Двойной правый нижний угол |
| 189 | 0xBD | ╜ | Двойной левый нижний угол |
| 190 | 0xBE | ╛ | Двойной левый верхний угол |
| 191 | 0xBF | ┐ | Правый верхний угол |
| 192 | 0xC0 | └ | Левый нижний угол |
| 193 | 0xC1 | ┴ | Пересечение линий сверху |
| 194 | 0xC2 | ┬ | Пересечение линий снизу |
| 195 | 0xC3 | ├ | Пересечение линий слева |
| 196 | 0xC4 | ─ | Горизонтальная линия |
| 197 | 0xC5 | ┼ | Пересечение линий |
| 198 | 0xC6 | ╞ | Двойная горизонтальная линия с соединением влево |
| 199 | 0xC7 | ╟ | Двойная горизонтальная линия с соединением вправо |
| 200 | 0xC8 | ╚ | Двойной левый нижний угол |
| 201 | 0xC9 | ╔ | Двойной левый верхний угол |
| 202 | 0xCA | ╩ | Двойное пересечение линий сверху |
| 203 | 0xCB | ╦ | Двойное пересечение линий снизу |
| 204 | 0xCC | ╠ | Двойное пересечение линий слева |
| 205 | 0xCD | ═ | Двойная горизонтальная линия |
| 206 | 0xCE | ╬ | Двойное пересечение линий |
| 207 | 0xCF | ╧ | Двойное пересечение линий сверху (одинарная внизу) |
| 208 | 0xD0 | ╨ | Двойное пересечение линий снизу (одинарная вверху) |
| 209 | 0xD1 | ╤ | Двойное пересечение линий сверху (одинарная слева) |
| 210 | 0xD2 | ╥ | Двойное пересечение линий снизу (одинарная справа) |
| 211 | 0xD3 | ╙ | Двойной левый нижний угол (одинарная вверху) |
| 212 | 0xD4 | ╘ | Двойной правый нижний угол (одинарная вверху) |
| 213 | 0xD5 | ╒ | Двойной левый верхний угол (одинарная внизу) |
| 214 | 0xD6 | ╓ | Двойной правый верхний угол (одинарная внизу) |
| 215 | 0xD7 | ╫ | Двойное пересечение линий (одинарная по диагонали) |
| 216 | 0xD8 | ╪ | Двойное пересечение линий (одинарная по диагонали) |
| 217 | 0xD9 | ┘ | Правый нижний угол |
| 218 | 0xDA | ┌ | Левый верхний угол |
| 219 | 0xDB | █ | Полный блок |
| 220 | 0xDC | ▄ | Нижняя половина блока |
| 221 | 0xDD | ▌ | Левая половина блока |
| 222 | 0xDE | ▐ | Правая половина блока |
| 223 | 0xDF | ▀ | Верхняя половина блока |
| 224 | 0xE0 | α | Альфа (греческая) |
| 225 | 0xE1 | ß | Эсцет (немецкая) |
| 226 | 0xE2 | Γ | Гамма (греческая) |
| 227 | 0xE3 | π | Пи (греческая) |
| 228 | 0xE4 | Σ | Сигма (греческая) |
| 229 | 0xE5 | σ | Сигма (строчная греческая) |
| 230 | 0xE6 | µ | Микро |
| 231 | 0xE7 | τ | Тау (греческая) |
| 232 | 0xE8 | Φ | Фи (греческая) |
| 233 | 0xE9 | Θ | Тета (греческая) |
| 234 | 0xEA | Ω | Омега (греческая) |
| 235 | 0xEB | δ | Дельта (греческая) |
| 236 | 0xEC | ∞ | Бесконечность |
| 237 | 0xED | φ | Фи (строчная греческая) |
| 238 | 0xEE | ε | Эпсилон (греческая) |
| 239 | 0xEF | ∩ | Пересечение множеств |
| 240 | 0xF0 | ≡ | Тождественно равно |
| 241 | 0xF1 | ± | Плюс-минус |
| 242 | 0xF2 | ≥ | Больше или равно |
| 243 | 0xF3 | ≤ | Меньше или равно |
| 244 | 0xF4 | ⌠ | Интеграл (верхняя часть) |
| 245 | 0xF5 | ⌡ | Интеграл (нижняя часть) |
| 246 | 0xF6 | ÷ | Деление |
| 247 | 0xF7 | ≈ | Приблизительно равно |
| 248 | 0xF8 | ° | Градус |
| 249 | 0xF9 | ∙ | Точка (средняя) |
| 250 | 0xFA | · | Точка (средняя) |
| 251 | 0xFB | √ | Квадратный корень |
| 252 | 0xFC | ⁿ | Степень n |
| 253 | 0xFD | ² | Квадрат |
| 254 | 0xFE | ■ | Квадрат |
| 255 | 0xFF | Неразрывный пробел |
Критика и ограничения
- Отсутствие кириллицы: CP437 не поддерживает кириллицу, что делало её непригодной для использования в русскоязычных системах без дополнительных модификаций. Для русского языка были разработаны отдельные кодовые страницы (CP866, CP1251).
- Ограниченный набор символов: 256 символов недостаточно для поддержки всех языков мира. Это привело к созданию множества различных кодовых страниц для разных регионов.
- Нестандартные символы: Некоторые символы CP437 (например, смайлики, карточные масти) не имеют стандартных аналогов в Unicode, что может вызывать проблемы при конвертации текста.
- Устаревание: С переходом на Unicode и графические интерфейсы CP437 потеряла актуальность. Современные системы редко используют её для отображения текста.
Источники
- IBM Personal Computer Technical Reference Manual (1981).
- Microsoft MS-DOS Programmer's Reference (1988).
- Стандарт Unicode, версия 15.0.
- Документация по эмулятору DOSBox.
- Статья «Code page 437» в английской Википедии.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →