IBM CP437
IBM CP437 (Code Page 437, OEM-US, MS-DOS Latin US) — это однобайтовая кодовая страница, разработанная корпорацией IBM в 1981 году для персональных компьютеров IBM PC. Является стандартной кодовой страницей для текстового режима операционной системы MS-DOS и ранних версий Microsoft Windows, работающих в текстовом режиме. CP437 представляет собой набор из 256 символов, включающий латинский алфавит, цифры, знаки препинания, математические символы, псевдографические символы для построения рамок и таблиц, а также ряд специальных символов, включая символы валют, стрелки и символы для рисования.
История
Происхождение
Кодовая страница 437 была создана в рамках проекта IBM по разработке операционной системы IBM PC DOS, которая должна была обеспечить совместимость с существующими стандартами и одновременно предоставить расширенные возможности для отображения текста и графики. В отличие от более ранних кодировок, таких как ASCII (American Standard Code for Information Interchange), CP437 включала в себя не только управляющие и печатные символы, но и значительное количество псевдографических символов, что позволяло создавать простые интерфейсы с рамками, меню и таблицами в текстовом режиме.
Распространение
С выпуском IBM PC в 1981 году CP437 стала де-факто стандартом для всех совместимых с IBM PC компьютеров, работающих под управлением MS-DOS. Она использовалась в текстовых редакторах (например, Norton Commander, FAR Manager), играх (например, Doom, Wolfenstein 3D), а также в системных утилитах и интерфейсах командной строки. Вплоть до середины 1990-х годов CP437 оставалась основной кодовой страницей для DOS-приложений, несмотря на появление альтернативных кодировок, таких как CP866 (для кириллицы) и CP850 (для западноевропейских языков).
Упадок и наследие
С переходом на графические операционные системы, такие как Microsoft Windows и Linux, использование CP437 в качестве стандартной кодовой страницы сократилось. В Windows она была заменена на кодовые страницы Windows-1251 (для кириллицы) и Windows-1252 (для западноевропейских языков), а также на Unicode. Тем не менее, CP437 продолжает использоваться в некоторых эмуляторах терминала, консольных приложениях, а также в качестве кодировки по умолчанию для файловых систем FAT и FAT32, где она используется для хранения имён файлов в формате 8.3.
Структура и кодировка
Диапазоны символов
CP437 состоит из 256 символов, которые делятся на несколько диапазонов:
- 0–31 (0x00–0x1F): Управляющие символы (C0). Включают такие символы, как NULL (0x00), Backspace (0x08), Tab (0x09), Line Feed (0x0A), Carriage Return (0x0D) и Escape (0x1B). Эти символы не отображаются на экране, а управляют поведением терминала или принтера.
- 32–127 (0x20–0x7F): Печатные символы ASCII. Включают латинский алфавит (A–Z, a–z), цифры (0–9), знаки препинания (.,;:!? и т.д.) и математические символы (+, -, *, /, =). Этот диапазон полностью соответствует стандарту ASCII, за исключением символа 0x7F (DEL), который в CP437 также является управляющим.
- 128–255 (0x80–0xFF): Расширенные символы. Этот диапазон включает в себя:
- Псевдографические символы (0xB0–0xDF): Символы для построения рамок, таблиц и линий (например, одинарные и двойные линии, углы, перекрестия).
- Математические символы (0xE0–0xEF): Символы, такие как α (альфа), β (бета), γ (гамма), π (пи), Σ (сигма), √ (корень), ∞ (бесконечность) и другие.
- Символы валют (0x9C, 0x9D, 0x9E): Символы, такие как £ (фунт стерлингов), ¥ (иена), € (евро — в более поздних версиях).
- Стрелки (0x18, 0x19, 0x1A, 0x1B): Стрелки вверх, вниз, влево и вправо.
- Специальные символы (0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F): Символы, такие как ♀ (женский знак), ♂ (мужской знак), ♪ (нота), ♫ (две ноты) и другие.
- Символы для рисования (0x10–0x1F): Символы, такие как █ (блок), ▓ (заштрихованный блок), ▒ (средний блок), ░ (светлый блок), а также символы для создания простых графических элементов.
Таблица символов (частичная)
| Код (hex) | Код (dec) | Символ | Описание |
|---|---|---|---|
| 0x20 | 32 | (пробел) | Пробел |
| 0x41 | 65 | A | Латинская заглавная A |
| 0x61 | 97 | a | Латинская строчная a |
| 0x30 | 48 | 0 | Цифра ноль |
| 0xB0 | 176 | ░ | Светлый блок (25% заливки) |
| 0xB1 | 177 | ▒ | Средний блок (50% заливки) |
| 0xB2 | 178 | ▓ | Тёмный блок (75% заливки) |
| 0xB3 | 179 | │ | Вертикальная линия (одинарная) |
| 0xC4 | 196 | ─ | Горизонтальная линия (одинарная) |
| 0xC9 | 201 | ╔ | Верхний левый угол (двойная линия) |
| 0xBA | 186 | ║ | Вертикальная линия (двойная) |
| 0xE0 | 224 | α | Греческая альфа |
| 0xE1 | 225 | β | Греческая бета |
| 0xE2 | 226 | Γ | Греческая гамма (заглавная) |
| 0xE3 | 227 | π | Греческая пи |
| 0xE4 | 228 | Σ | Греческая сигма (заглавная) |
| 0xE5 | 229 | σ | Греческая сигма (строчная) |
| 0xE6 | 230 | µ | Микро (греческая мю) |
| 0xE7 | 231 | τ | Греческая тау |
| 0xE8 | 232 | Φ | Греческая фи (заглавная) |
| 0xE9 | 233 | Θ | Греческая тета (заглавная) |
| 0xEA | 234 | Ω | Греческая омега (заглавная) |
| 0xEB | 235 | δ | Греческая дельта (строчная) |
| 0xEC | 236 | ∞ | Бесконечность |
| 0xED | 237 | ∅ | Пустое множество |
| 0xEE | 238 | ∈ | Принадлежит |
| 0xEF | 239 | ∩ | Пересечение |
| 0xF0 | 240 | ≡ | Тождественно |
| 0xF1 | 241 | ± | Плюс-минус |
| 0xF2 | 242 | ≥ | Больше или равно |
| 0xF3 | 243 | ≤ | Меньше или равно |
| 0xF4 | 244 | ⌠ | Верхний интеграл |
| 0xF5 | 245 | ⌡ | Нижний интеграл |
| 0xF6 | 246 | ÷ | Деление |
| 0xF7 | 247 | ≈ | Приблизительно |
| 0xF8 | 248 | ° | Градус |
| 0xF9 | 249 | ∙ | Точка (оператор) |
| 0xFA | 250 | · | Средняя точка |
| 0xFB | 251 | √ | Квадратный корень |
| 0xFC | 252 | ⁿ | Степень n |
| 0xFD | 253 | ² | Квадрат |
| 0xFE | 254 | ■ | Чёрный квадрат |
| 0xFF | 255 | (неразрывный пробел) | Неразрывный пробел |
Применение
Текстовые интерфейсы
Основное применение CP437 — создание текстовых пользовательских интерфейсов (TUI) в операционной системе MS-DOS. Псевдографические символы позволяли разработчикам создавать рамки, меню, диалоговые окна и таблицы, не прибегая к графическим режимам. Это было особенно важно в условиях ограниченных ресурсов ранних ПК, где графический режим требовал значительных вычислительных мощностей и памяти.
Игры
CP437 широко использовалась в компьютерных играх 1980-х и начала 1990-х годов. Псевдографические символы применялись для отображения лабиринтов, карт, интерфейсов и даже простых анимаций. Например, в игре «Rogue» (1980) и её последователях (например, «NetHack») использовались символы CP437 для отображения персонажей, монстров и предметов. В игре «Doom» (1993) интерфейс (здоровье, боеприпасы, карта) также был построен на основе CP437.
Системные утилиты
Многие системные утилиты MS-DOS, такие как dir, type, edit, debug, fdisk, использовали CP437 для вывода информации. Например, команда dir отображала имена файлов и каталогов, используя символы CP437 для разделителей, а команда type выводила содержимое текстовых файлов, интерпретируя их как CP437.
Файловые системы
CP437 используется в файловых системах FAT12, FAT16 и FAT32 для хранения имён файлов в формате 8.3 (до 8 символов имени, точка, до 3 символов расширения). Это означает, что имена файлов, созданные в MS-DOS, могут содержать только символы из CP437. При переходе на более современные файловые системы (NTFS, ext4) имена файлов хранятся в Unicode, но при работе с FAT-устройствами (например, флеш-накопителями) может использоваться CP437.
Критика и ограничения
Отсутствие поддержки кириллицы
CP437 не включает в себя символы кириллицы, что делает её непригодной для использования в русскоязычных текстах. Для работы с кириллицей в MS-DOS была разработана отдельная кодовая страница — CP866 (OEM Cyrillic), которая заменила часть расширенных символов CP437 на буквы русского алфавита.
Ограниченный набор символов
CP437 содержит только 256 символов, что недостаточно для отображения всех символов, используемых в различных языках мира. Например, в ней отсутствуют символы с диакритическими знаками (например, é, ü, ñ), а также символы для многих азиатских языков. Это ограничение привело к созданию множества локальных кодовых страниц, таких как CP850 (для западноевропейских языков), CP852 (для восточноевропейских языков) и CP866 (для кириллицы).
Несовместимость с Unicode
CP437 несовместима с Unicode, что создаёт проблемы при обмене данными между системами, использующими разные кодировки. Например, текст, сохранённый в CP437, может быть неправильно отображён в системе, использующей Unicode, если не выполнена корректная конвертация.
Интересные факты
- Символы CP437, такие как █ (блок) и ▓ (заштрихованный блок), использовались в ранних BBS (Bulletin Board System) для создания простых графических изображений и анимаций.
- Некоторые символы CP437, например, ♪ (нота) и ♫ (две ноты), использовались в играх для воспроизведения звуковых эффектов через встроенный динамик ПК.
- CP437 является одной из немногих кодовых страниц, которая включает в себя символы для отображения математических операторов, таких как √ (корень), ∞ (бесконечность) и ∫ (интеграл).
- В эмуляторах терминала, таких как xterm, PuTTY и Windows Terminal, можно настроить использование CP437 для отображения текста, что позволяет запускать старые DOS-приложения в современных операционных системах.
Источники
- IBM. «IBM PC DOS Technical Reference». IBM Corporation, 1981.
- Microsoft. «MS-DOS User's Guide and Reference». Microsoft Corporation, 1985.
- The Unicode Consortium. «The Unicode Standard, Version 15.0». Mountain View, CA: The Unicode Consortium, 2022.
- RFC 1345. «Character Mnemonics & Character Sets». Internet Engineering Task Force, 1992.
- «Code Page 437». Wikipedia, The Free Encyclopedia.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →