Конвертер кодировок текста

Windows-1251: главная кириллическая кодировка эпохи Windows

Перекодировать текст из Windows-1251 ↓

Windows-1251, которую также называют CP1251, представляет собой однобайтовую кодировку, разработанную для записи текстов на языках с кириллической письменностью. Она появилась в начале 1990-х годов вместе с русифицированными версиями Windows и на долгие годы стала стандартом для русскоязычных пользователей этой операционной системы. В ней создавались документы, письма, базы данных и веб-страницы, и до сих пор огромное количество старых файлов хранится именно в этом формате.

Устроена кодировка просто. Каждый символ занимает ровно один байт, а значит, таблица вмещает 256 позиций. Первая половина таблицы, от 0 до 127, полностью совпадает с ASCII: здесь находятся латинские буквы, цифры, знаки препинания и управляющие символы. Благодаря этому английский текст и программный код выглядят в Windows-1251 точно так же, как и в большинстве других кодировок. Вторая половина, от 128 до 255, отдана кириллице и дополнительным знакам.

Главное достоинство Windows-1251 заключается в расположении букв. Русский алфавит от "А" до "я" занимает непрерывный диапазон с 192 по 255 позицию и идёт строго по порядку: сначала все заглавные буквы, затем все строчные. Это заметно упрощает сортировку и преобразование регистра, ведь код строчной буквы отличается от кода заглавной на постоянную величину. Исключением стала буква "Ё": она вместе со строчной "ё" вынесена за пределы основного блока, из-за чего в старых программах нередко оказывалась не на своём месте при сортировке по алфавиту.

Кодировка рассчитана не только на русский язык. В ней есть специфические буквы украинского, белорусского, сербского, македонского и болгарского алфавитов, поэтому Windows-1251 использовалась на значительной части Восточной Европы. Кроме того, в таблицу включены типографские знаки, без которых трудно набрать грамотный текст: угловые кавычки, длинное тире, многоточие, знак номера, символы параграфа и авторского права. Позже в неё добавили и знак евро. В то же время кодировка не содержит букв многих других кириллических алфавитов, например казахского или таджикского, и не позволяет совмещать в одном тексте кириллицу с западноевропейскими буквами с диакритикой.

Windows-1251 никогда не была единственной кириллической кодировкой, и именно это стало источником множества проблем. В MS-DOS применялась CP866, известная также как "альтернативная кодировка": в ней русские буквы разбиты на два блока, а между ними размещены символы псевдографики для рисования рамок и таблиц в текстовом режиме. В Unix-системах и в ранней русскоязычной электронной почте господствовала KOI8-R, где буквы расположены не по алфавиту, а по созвучию с латинскими: если у такого текста потерять старший бит, он превратится в читаемый транслит. Существовали также международный стандарт ISO-8859-5, который почти не прижился на практике, и MacCyrillic, применявшаяся на компьютерах Apple.

Все эти кодировки используют одни и те же числовые значения для разных символов, поэтому текст, открытый не в той таблице, превращается в бессмыслицу, которую в обиходе называют "кракозябрами". Классический пример: слово "Привет", сохранённое в Windows-1251 и прочитанное как KOI8-R, выглядит как "оПХБЕР". Сегодня чаще встречается другой случай, когда текст в UTF-8 ошибочно открывают как Windows-1251: тогда то же слово превращается в "Привет", а характерным признаком ошибки служит обилие чередующихся букв "Р" и "С". Если же кириллицу в Windows-1251 прочитать как западноевропейскую Windows-1252, на экране появятся латинские буквы с диакритическими знаками.

Решением проблемы множества несовместимых таблиц стал Юникод и его самая распространённая форма записи, UTF-8. В отличие от однобайтовых кодировок, UTF-8 отводит на символ от одного до четырёх байтов и способна представить практически все письменности мира в одном документе. Кириллические буквы занимают в ней по два байта, поэтому русский текст в UTF-8 получается примерно вдвое объёмнее, чем в Windows-1251. При нынешних объёмах памяти и скоростях передачи данных это давно не имеет значения, а универсальность оказалась гораздо важнее. Внутри самой Windows для хранения строк применяется UTF-16, а Windows-1251 сохраняется как унаследованная кодовая страница для совместимости со старыми программами.

В наши дни Windows-1251 постепенно уходит в прошлое. Подавляющее большинство сайтов работает в UTF-8, современные редакторы и языки программирования используют её по умолчанию, и новые проекты в старой кодировке практически не создаются. Тем не менее встретиться с ней можно до сих пор: в ней хранятся архивы документов, выгрузки из учётных систем, старые базы данных, файлы субтитров, конфигурации давно написанных программ и некоторые CSV-файлы, которые табличные редакторы по-прежнему сохраняют в региональной кодовой странице.

Именно поэтому знать о существовании Windows-1251 полезно и сегодня. Если текст отображается неправильно, первым делом стоит проверить, не записан ли он в этой кодировке, и при необходимости преобразовать его в UTF-8. На веб-странице, которая всё ещё хранится в старом формате, кодировку нужно явно указать в теге meta значением "windows-1251", иначе браузер может ошибиться с выбором. Понимание того, чем Windows-1251 отличается от KOI8-R, CP866 и Юникода, позволяет быстро распознать причину ошибки по внешнему виду искажённых символов и восстановить исходный текст без потерь.

Частые вопросы

Как перевести текст из Windows-1251 в UTF-8?
Загрузите файл в конвертер, выберите под полем результата кодировку UTF-8 и нажмите «Скачать файл в этой кодировке». Подробнее — на странице Windows-1251 → UTF-8.
Как выглядит текст в Windows-1251, открытый в другой кодировке?
Открытый как UTF-8 — ромбами с вопросами, как Windows-1252 — латинскими буквами с диакритикой («Ïðèâåò»), как KOI8-R — кириллицей с перевёрнутым регистром («оПХБЕР»), как CP866 — псевдографикой («╧ЁштхЄ»).