Windows-1251
Windows-1251 — это однобайтовая кодовая страница (набор символов), предназначенная для кодирования букв кириллических алфавитов (русского, украинского, белорусского, болгарского и других) в операционных системах семейства Windows. Разработана корпорацией Microsoft в начале 1990-х годов как часть семейства кодовых страниц Windows, пришедших на смену устаревшим кодировкам MS-DOS (CP 866) и KOI8-R. Стандартизирована под номером 1251 в системе кодирования Windows (Windows Code Page). На протяжении 1990-х — 2000-х годов являлась одной из самых распространённых кодировок кириллицы в персональных компьютерах, особенно в русскоязычном сегменте интернета и программного обеспечения.
История
Предпосылки создания
До появления Windows 3.1 и Windows 95 для работы с кириллицей в среде MS-DOS использовалась кодовая страница CP 866, которая включала как кириллические буквы, так и псевдографические символы, необходимые для интерфейса DOS. В UNIX-подобных системах и сетях (включая ранний интернет) доминировала кодировка KOI8-R, разработанная для передачи русскоязычных текстов по каналам связи. Обе кодировки имели существенные недостатки: отсутствие некоторых букв (например, «ё» в CP 866 не всегда была в стандартной позиции), несовместимость с латинскими раскладками и сложности с перекодировкой.
Разработка Microsoft
В начале 1990-х годов Microsoft разработала новую кодовую страницу для Windows, которая должна была обеспечить полную совместимость с кириллическими алфавитами при сохранении обратной совместимости с ASCII (первые 128 символов). Кодовая страница Windows-1251 была включена в состав Windows 3.1 (с дополнениями для кириллицы) и стала стандартной для Windows 95. В отличие от CP 866, она не содержала псевдографики, но включала все буквы кириллицы (включая «ё» и «Ё»), а также буквы украинского, белорусского и болгарского алфавитов.
Распространение и упадок
Благодаря доминированию Windows на рынке персональных компьютеров, Windows-1251 стала де-факто стандартом для русскоязычных текстов в 1990-е — 2000-е годы. Она использовалась в текстовых редакторах (Microsoft Word, Блокнот), веб-страницах (до массового перехода на UTF-8), электронной почте и базах данных. Однако с развитием интернета и необходимостью поддержки множества языков на одной странице, однобайтовые кодировки стали вытесняться многобайтовой кодировкой UTF-8 (стандарт Юникода). К середине 2010-х годов использование Windows-1251 в вебе резко сократилось, хотя она по-прежнему поддерживается во всех версиях Windows и многих приложениях для совместимости со старыми документами.
Структура и характеристики
Таблица символов
Windows-1251 является 8-битной кодировкой, где каждый символ кодируется одним байтом (256 возможных значений). Первые 128 значений (0x00—0x7F) полностью соответствуют стандарту ASCII (латинские буквы, цифры, знаки препинания, управляющие символы). Оставшиеся 128 значений (0x80—0xFF) отведены под кириллические буквы и дополнительные знаки.
Основные диапазоны:
- 0x80—0x8F: управляющие символы и знаки псевдографики (частично унаследованы от CP 866, но в Windows-1251 используются редко).
- 0x90—0x9F: знаки пунктуации и дополнительные символы (кавычки, тире, апостроф).
- 0xA0: неразрывный пробел.
- 0xA1—0xAF: знаки препинания, символы валют (рубль, евро), математические и типографские знаки.
- 0xB0—0xBF: буквы «ё», «Ё», а также символы для украинского и белорусского языков (например, «і», «ї», «є», «ў»).
- 0xC0—0xDF: прописные кириллические буквы (А—Я, включая Ё).
- 0xE0—0xFF: строчные кириллические буквы (а—я, включая ё).
Полный набор включает 66 кириллических букв (33 прописных и 33 строчных), что позволяет корректно отображать тексты на русском, украинском, белорусском, болгарском, сербском (кириллица), македонском и других языках, использующих кириллицу.
Отличия от других кириллических кодировок
- CP 866: содержит псевдографику, не включает букву «ё» в стандартную позицию, имеет другую раскладку символов.
- KOI8-R: основана на перестановке регистров (строчные буквы находятся на местах прописных и наоборот), что упрощает перекодировку при потере 8-го бита, но неудобно для прямого использования.
- ISO 8859-5: международный стандарт, но редко использовался в Windows; отличается порядком расположения кириллических букв.
Поддержка в операционных системах
Windows-1251 встроена во все версии Windows, начиная с Windows 95. В Unix-подобных системах (Linux, macOS) поддержка реализуется через библиотеки iconv и локали (например, ru_RU.CP1251). В современных системах по умолчанию используется UTF-8, но Windows-1251 остаётся доступной для совместимости.
Применение
Веб-страницы
В 1990-х — начале 2000-х годов Windows-1251 была основной кодировкой русскоязычных сайтов. Она указывалась в мета-теге <meta (организация признана экстремистской, деятельность запрещена в РФ) charset="windows-1251"> или в HTTP-заголовке Content-Type: text/html; charset=windows-1251. С переходом на UTF-8 (около 2010 года) доля сайтов на Windows-1251 резко упала, однако многие архивные страницы и старые проекты (например, сайты государственных учреждений, библиотек) до сих пор используют эту кодировку.
Текстовые редакторы и документы
Microsoft Word, Блокнот, WordPad и другие редакторы сохраняют возможность открытия и сохранения файлов в Windows-1251. Форматы файлов .txt, .doc (старые версии), .rtf могут содержать текст в этой кодировке. При открытии таких файлов в современных редакторах часто требуется ручное указание кодировки.
Электронная почта
В протоколах SMTP и MIME Windows-1251 использовалась для отправки и приёма писем на русском языке. Заголовки писем содержали параметр charset=windows-1251. С переходом на UTF-8 эта практика стала менее распространённой, но многие почтовые клиенты (Outlook, Thunderbird) поддерживают автоматическое распознавание кодировки.
Базы данных
В системах управления базами данных (СУБД), таких как MySQL, PostgreSQL, Microsoft SQL Server, Windows-1251 использовалась для хранения текстовых полей. Например, в MySQL кодировка cp1251_general_ci была одной из самых популярных для русскоязычных проектов. В современных версиях СУБД рекомендуется использовать UTF-8 (utf8mb4), но поддержка CP1251 сохраняется.
Проблемы и ограничения
Несовместимость с Юникодом
Windows-1251 не может одновременно отображать символы разных языковых групп (например, кириллицу, латиницу, иероглифы). Для многоязычных текстов требуется переключение кодировок или использование UTF-8. При конвертации из Windows-1251 в UTF-8 возможны ошибки, если исходный текст содержит символы, отсутствующие в кодовой странице (например, редкие типографские знаки).
Проблемы с буквой «ё»
Хотя «ё» присутствует в Windows-1251 (коды 0xB8 для прописной и 0xA8 для строчной), в некоторых старых программах и базах данных она могла отсутствовать или заменяться на «е». Это приводило к ошибкам при поиске и сортировке (например, слова «все» и «всё» считались одинаковыми).
Кракозябры
При неправильном указании кодировки (например, открытие файла Windows-1251 как CP 866 или KOI8-R) текст отображается в виде нечитаемых символов — так называемых «кракозябр». Эта проблема была особенно распространена в раннем интернете и при обмене файлами между разными операционными системами.
Современное состояние
На 2025 год Windows-1251 считается устаревшей кодировкой. Основные причины:
- UTF-8 является стандартом де-факто для веба, электронной почты и современных приложений.
- Юникод поддерживает все символы кириллицы (блоки «Кириллица» и «Кириллица дополнительная»), что позволяет корректно отображать редкие буквы (например, «Ӂ», «Ґ», «Љ»).
- Операционные системы (Windows 10/11, macOS, Linux) по умолчанию используют UTF-8.
Тем не менее, Windows-1251 продолжает использоваться в следующих случаях:
- Чтение и редактирование архивных документов (1990-е — 2000-е годы).
- Работа со старыми базами данных (например, 1С:Предприятие 7.7, некоторые конфигурации 8.x).
- Поддержка устаревшего программного обеспечения (например, DOS-приложений через эмуляторы).
- Некоторые государственные информационные системы, где переход на UTF-8 требует значительных затрат.
Интересные факты
- В Windows-1251 отсутствует символ «рубль» (₽), так как он был введён в Юникод только в 2013 году. В старых документах вместо него использовались сочетания «руб.», «р.» или символ «R» с перечёркиванием (нестандартный).
- Кодовая страница 1251 является одной из немногих, где буква «ё» имеет свой собственный код, отличный от «е» (в отличие от некоторых других кириллических кодировок, где «ё» отсутствовала).
- В Windows-1251 для украинского языка добавлены буквы «і», «ї», «є», «ґ» (последняя — в версии для Украины, хотя в стандартной Microsoft-версии «ґ» отсутствует, что вызывало критику со стороны украинских пользователей).
- При конвертации текста из Windows-1251 в CP 866 часто теряются типографские кавычки («ёлочки») и длинное тире, которые заменяются на прямые кавычки и дефис.
Источники
- Microsoft. «Windows Code Pages». MSDN Library.
- Unicode Consortium. «The Unicode Standard, Version 15.0». 2022.
- ГОСТ Р 34.303-92 (ИСО 8859-5). «Наборы символов для обмена информацией».
- «Кодировки кириллицы». Материалы сайта «Кодировки.ру» (архив).
- «История кодировок в России». Статья в журнале «КомпьютерПресс», № 3, 2000.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →