Кодовая страница
Кодовая страница (англ. code page, charset) — это таблица соответствия, устанавливающая связь между числовыми кодами (обычно байтами) и графическими символами (буквами, цифрами, знаками препинания, псевдографикой) в компьютерных системах. Кодовая страница определяет, какой символ будет отображаться или обрабатываться при получении определённого числового значения. Является одним из способов реализации кодировки символов, исторически предшествовавшим более универсальным стандартам, таким как Unicode.
История
Ранние компьютерные системы и ASCII
Первые компьютерные системы использовали простые кодировки, часто привязанные к конкретному оборудованию. В 1963 году Американский национальный институт стандартов (ANSI) утвердил стандарт ASCII (American Standard Code for Information Interchange), который использовал 7 бит для кодирования 128 символов (0–127). ASCII включал латинский алфавит, цифры, знаки препинания и управляющие символы. Однако 7-битная кодировка не могла охватить символы других языков (например, кириллицу, немецкие умлауты, французские акценты).
Расширение до 8 бит
С переходом на 8-битные байты появилась возможность кодировать 256 символов (0–255). Первые 128 кодов (0–127) обычно соответствовали ASCII, а коды 128–255 (так называемая «верхняя половина» таблицы) отводились под дополнительные символы. Каждый производитель или организация разрабатывала собственные таблицы для своих нужд. Так возникли кодовые страницы.
Эпоха IBM PC
Ключевую роль в популяризации кодовых страниц сыграла компания IBM. В 1981 году с выпуском IBM PC была представлена кодовая страница CP437 (OEM-кодировка), которая включала символы псевдографики, математические знаки и некоторые буквы европейских языков. CP437 стала стандартом для текстового режима MS-DOS.
Для работы с разными языками IBM разработала серию кодовых страниц, обозначаемых номерами (например, CP850 — для западноевропейских языков, CP866 — для кириллицы). Каждая кодовая страница представляла собой фиксированную таблицу из 256 символов.
Кодовые страницы Windows
Компания Microsoft при разработке операционной системы Windows создала собственные кодовые страницы, известные как Windows-125x. Они отличались от OEM-кодировок IBM, так как были оптимизированы для графического интерфейса и не содержали символов псевдографики. Наиболее известные:
- Windows-1251 — кириллическая кодировка, широко использовавшаяся в России и странах СНГ в 1990–2000-х годах.
- Windows-1252 — кодировка для западноевропейских языков (почти идентична ISO 8859-1, но с некоторыми отличиями в диапазоне 0x80–0x9F).
Кодовые страницы в других системах
В мире Unix и Linux широкое распространение получили кодировки стандарта ISO 8859 (например, ISO 8859-1 для латиницы, ISO 8859-5 для кириллицы). Они также являлись 8-битными кодовыми страницами.
Для японского, китайского и корейского языков, где количество символов превышает 256, использовались многобайтовые кодировки (например, Shift JIS, EUC-JP, Big5). Однако в контексте IBM и Microsoft они также часто назывались кодовыми страницами (например, CP932 для Shift JIS).
Закат эпохи кодовых страниц
С развитием интернета и необходимостью единой кодировки для всех языков мира возник стандарт Unicode. Unicode использует 16-битные (UCS-2) или 32-битные (UTF-32) коды, а также переменную длину кодирования (UTF-8, UTF-16). UTF-8, в частности, стал доминирующей кодировкой в вебе, так как обратно совместим с ASCII и эффективен для латиницы. Начиная с 2000-х годов, операционные системы и приложения постепенно переходят на Unicode, оставляя кодовые страницы для обратной совместимости со старыми данными.
Классификация
Кодовые страницы можно классифицировать по нескольким признакам.
По производителю или стандарту
- OEM-кодировки IBM (например, CP437, CP850, CP866, CP852). Использовались в MS-DOS и текстовых терминалах.
- Кодировки Windows (ANSI) (например, Windows-1251, Windows-1252). Использовались в графических приложениях Windows до широкого внедрения Unicode.
- Кодировки ISO 8859 (например, ISO 8859-1, ISO 8859-5). Международные стандарты для разных языковых групп.
- Кодировки Mac OS (например, MacRoman, MacCyrillic). Использовались в классической Mac OS.
- Кодировки для восточноазиатских языков (например, CP932, CP936, CP949, CP950). Многобайтовые кодировки для японского, упрощённого китайского, корейского и традиционного китайского языков соответственно.
По количеству байт на символ
- Однобайтовые (SBCS — Single-Byte Character Set). Каждому символу соответствует 1 байт. Максимум 256 символов. Примеры: CP437, Windows-1251, ISO 8859-1.
- Многобайтовые (MBCS — Multi-Byte Character Set) или DBCS (Double-Byte Character Set). Для кодирования символов используется переменное количество байт (обычно 1 или 2). Применяются для языков с большим количеством символов. Примеры: CP932 (Shift JIS), CP936 (GBK).
По языковой поддержке
- Кириллические (CP866, Windows-1251, ISO 8859-5, KOI8-R).
- Западноевропейские (CP850, Windows-1252, ISO 8859-1).
- Центральноевропейские (CP852, Windows-1250, ISO 8859-2).
- Балтийские (CP775, Windows-1257, ISO 8859-4).
- Греческие (CP737, Windows-1253, ISO 8859-7).
- Турецкие (CP857, Windows-1254, ISO 8859-9).
- Арабские (CP864, Windows-1256, ISO 8859-6).
- Иврит (CP862, Windows-1255, ISO 8859-8).
- Восточноазиатские (CP932, CP936, CP949, CP950).
Устройство и характеристики
Структура однобайтовой кодовой страницы
Однобайтовая кодовая страница представляет собой таблицу из 256 записей. Каждая запись имеет индекс (от 0 до 255) и соответствующее ему графическое изображение символа или управляющую функцию.
- Диапазон 0–31 (0x00–0x1F): управляющие символы (например, NUL, SOH, STX, CR, LF). В разных кодовых страницах эти коды обычно совпадают, так как заимствованы из ASCII.
- Диапазон 32–127 (0x20–0x7F): печатные символы ASCII (пробел, цифры, латинские буквы, знаки препинания). В большинстве кодовых страниц этот диапазон совпадает со стандартом ASCII.
- Диапазон 128–255 (0x80–0xFF): дополнительные символы, специфичные для данной кодовой страницы. Здесь могут располагаться буквы национальных алфавитов, символы псевдографики, математические знаки, диакритические знаки.
Проблема несовместимости
Главный недостаток кодовых страниц — несовместимость. Текст, созданный в одной кодовой странице, при открытии в другой будет отображаться неправильно (так называемый «кракозябры»). Например, файл, сохранённый в кодировке Windows-1251, при попытке прочитать его как CP866 или KOI8-R будет содержать бессмысленный набор символов.
Идентификация
Для идентификации кодовой страницы в операционной системе или приложении используется числовой номер. В Windows номера кодовых страниц задаются в реестре. В Unix-подобных системах для указания локали используется строка вида ru_RU.CP1251 или ru_RU.KOI8-R.
Применение
Историческое
- MS-DOS и ранние версии Windows: кодовые страницы были единственным способом работы с текстом на разных языках.
- Текстовые терминалы и BBS (Bulletin Board System): использовали кодовые страницы для отображения псевдографики и национальных символов.
- Электронная почта и Usenet: до появления MIME (Multipurpose Internet Mail Extensions) кодировка сообщения указывалась с помощью заголовка
charset.
Современное
- Обратная совместимость: многие старые файлы, документы и базы данных до сих пор хранятся в кодировках, основанных на кодовых страницах. Современные операционные системы и приложения (например, текстовые редакторы, веб-браузеры) поддерживают автоматическое определение и конвертацию кодовых страниц.
- Встраиваемые системы и специализированное ПО: в некоторых устройствах с ограниченными ресурсами (например, старые принтеры, кассовые аппараты, промышленные контроллеры) до сих пор используются однобайтовые кодовые страницы.
- Командная строка Windows: в консоли Windows (cmd.exe) по умолчанию используется OEM-кодировка (например, CP866 для русской локали), что может приводить к проблемам при выводе текста, созданного в приложениях Windows (которые используют кодировку Windows-1251).
- Веб-разработка: хотя стандартом является UTF-8, старые веб-сайты могут быть закодированы в Windows-1251 или других кодовых страницах. Браузеры корректно отображают их при указании соответствующей кодировки в заголовке HTTP или мета-теге.
Примеры кодовых страниц
| Номер (CP) | Название | Языковая поддержка | Примечание |
|---|---|---|---|
| 437 | OEM-US | Английский, псевдографика | Стандартная кодировка IBM PC |
| 850 | OEM Multilingual Latin 1 | Западноевропейские языки | Замена CP437 в Европе |
| 852 | OEM Latin 2 | Центральноевропейские языки (польский, чешский, венгерский) | |
| 855 | OEM Cyrillic | Кириллица (основная) | Использовалась в MS-DOS для кириллицы до появления CP866 |
| 866 | OEM Russian | Кириллица (русский, украинский, белорусский) | Стандартная кодировка MS-DOS для России |
| 932 | Shift JIS | Японский | Многобайтовая кодировка |
| 936 | GBK | Упрощённый китайский | Многобайтовая кодировка |
| 1250 | Windows Central Europe | Центральноевропейские языки | |
| 1251 | Windows Cyrillic | Кириллица (русский, украинский, белорусский, болгарский, сербский) | Самая распространённая кириллическая кодировка в Windows |
| 1252 | Windows Latin 1 | Западноевропейские языки | |
| KOI8-R | KOI8-R | Кириллица (русский) | Популярна в Unix-системах и в российском интернете 1990-х годов |
| ISO 8859-1 | Latin 1 | Западноевропейские языки | Стандарт ISO |
| ISO 8859-5 | Cyrillic | Кириллица | Стандарт ISO |
Критика
Основная критика кодовых страниц связана с их фундаментальным ограничением: невозможностью одновременно работать с символами из разных языков в одном документе. Для переключения между языками требовалось менять кодовую страницу, что приводило к путанице и потере данных. С развитием глобализации и интернета это стало серьёзной проблемой, которую решил Unicode.
Кроме того, существовало множество нестандартизированных и конфликтующих кодовых страниц, особенно для кириллицы (CP866, Windows-1251, KOI8-R, ISO 8859-5, MacCyrillic), что создавало значительные трудности при обмене данными.
См. также
- Кодировка символов
- ASCII
- Unicode
- UTF-8
- Кириллица в информатике
- Кракозябры
Источники
- Кульгин М. В. Технология программирования на C++. — СПб.: БХВ-Петербург, 2005.
- Таненбаум Э., Бос Х. Современные операционные системы. — СПб.: Питер, 2015.
- Спецификации IBM на кодовые страницы (IBM Knowledge Center).
- Документация Microsoft по кодовым страницам (Microsoft Learn).
- Стандарты ISO/IEC 8859.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →