
Microsoft Windows: пример показа расширений файлов. Расширение помогает определить формат документа, но само по себе не сообщает его кодировку.
© Microsoft. Used with permission from Microsoft. · источник и условия использования · Microsoft screenshot permissions
В старой программе русские буквы превратились в «Рџ…», вопросительные знаки или квадраты. Причины различаются: байты могли прочитать в другой кодировке, данные могли уже сохраниться с потерями либо шрифт не поддерживает нужные символы.
Раскладка клавиатуры определяет ввод. Язык интерфейса Windows определяет переводы элементов системы. Системная локаль влияет на часть старых не-Unicode-программ, а кодировка файла описывает преобразование его байтов в текст. Смена одной из этих настроек не меняет автоматически остальные. [1], [2]
Начните с копии данных. Если проблема в бухгалтерской базе, старом каталоге или проекте, не пересохраняйте его случайным редактором ради проверки: формат может быть двоичным или иметь собственные правила.
Схема редакции «Мы из 90х».
Сравните меню программы, ввод нового текста и открытие старого файла. Если ломается только содержимое одного документа, начните с его происхождения и настроек импорта. Если некорректно всё старое приложение, проверьте его совместимость с текущей кодовой страницей.
Квадраты могут указывать на отсутствие подходящих знаков в шрифте, но один вид картинки не является точным диагнозом. Вопросительные знаки могли быть записаны вместо исходных букв во время прежнего преобразования. Тогда простая смена режима просмотра не вернёт утраченную информацию.
Сохраните оригинальные байты или резервную копию до любых преобразований. «Сохранить как UTF-8» после неправильного чтения может закрепить уже испорченные символы в новой корректно записанной кодировке.
| Наблюдение | Что сравнить |
|---|---|
| Ломается один файл | Исходную кодировку и способ импорта |
| Ломается старая программа целиком | Локаль, ANSI-режим и совместимость |
| Видны квадраты | Наличие символов в шрифте |
| В оригинале уже сохранены вопросительные знаки | Более раннюю копию данных |
Учебная таблица редакции.
В старых Windows-программах «ANSI» обычно означает системную кодовую страницу, выбранную для соответствующих интерфейсов. Это не единая универсальная кодировка для всех компьютеров и всех языков.
Для русскоязычных данных часто встречается Windows-1251, а в старых консольных сценариях — OEM-страницы, например 866. UTF-8 использует другое кодирование. Программа должна понимать, какие байты получает.
Unicode-приложение может вообще не зависеть от обычной ANSI-страницы для собственного интерфейса. Кроме того, современная программа может явно выбрать UTF-8 для себя. Microsoft описывает настройку activeCodePage и условия её использования отдельно. [1]
Текущее значение локали можно прочитать в PowerShell:
PowerShell
Get-WinSystemLocaleЗатем откройте региональные параметры через intl.cpl, перейдите к дополнительным административным настройкам и нажмите изменение языка системы для программ, не поддерживающих Unicode.
Запишите выбранную локаль и состояние флажка Beta: Use Unicode UTF-8 for worldwide language support. Сам вывод ru-RU не заменяет проверку этого флажка: язык и выбор UTF-8 нужно учитывать отдельно.
Изменение системной локали действует на компьютер и требует перезапуска. На рабочем устройстве оно может затронуть несколько старых программ. Сохраните исходное состояние, чтобы проверить один фактор и затем вернуть его. [1], [2], [3]
| Настройка | Почему важна |
|---|---|
| Текущая системная локаль | Определяет контекст старых приложений |
| Флажок UTF-8 | Может менять ожидаемую ANSI-страницу |
| Версия проблемной программы | Поддержка зависит от реализации |
| Формат и происхождение данных | Нужно знать ожидаемые байты |
Учебная таблица редакции.
Если приложение рассчитывает на старую кодовую страницу или один байт на символ, новое окружение может нарушить его предположения. Поэтому флажок не является универсальным обновлением всех старых EXE.
Сначала проверьте требования разработчика своей версии. Если программа ожидает русскую системную локаль без UTF-8-режима, сравнение выполняют именно в таких условиях, сохранив исходные настройки и копию данных. Если разработчик поддерживает UTF-8, следуйте его способу включения.
Меняйте один параметр за раз, перезагружайте систему, затем открывайте контрольную копию. Не меняйте одновременно локаль, шрифты, региональный формат и кодировку всей базы — результат станет невозможно объяснить.
В командной строке команда без параметров показывает активную кодовую страницу консоли:
Командная строка
chcpЭто настройка консольного окружения, а не универсальная смена кодировки графических программ. Команда не перекодирует автоматически существующий текстовый файл или базу данных. Поведение запущенной программы зависит также от её собственной реализации. [4]
Если работаете с перенаправлением вывода в файл, отдельно выясните кодировку, которую использует сама программа и оболочка. Визуально правильная строка на экране не гарантирует, что другой инструмент прочитает сохранённый вывод так же.
Не используйте chcp 65001 как общий рецепт для любого старого приложения с кириллицей. Сначала определите, что именно читает и пишет программа.
Для слова «Привет» можно получить характерное искажение, если его UTF-8-байты ошибочно декодировать как Windows-1251:
| Шаг | Результат |
|---|---|
| Исходный текст | Привет |
| Кодирование | Байты UTF-8 |
| Ошибочное чтение как Windows-1251 | Привет |
Пример вычислен для объяснения кодировок. Это не скриншот неисправности пользователя и не результат испытания Windows.
Учебная таблица редакции.
Если исходные байты сохранены, может помочь правильный режим чтения или импорта. Если искажённый результат уже многократно пересохранён, требуется установить последовательность преобразований и наличие ранней копии.
Не применяйте массовое «исправление кракозябр» ко всему каталогу: часть файлов уже может быть корректной или использовать другую кодировку. Сначала проверьте один известный документ и обратимость выбранного способа.
После одного изменения откройте исходную копию, проверьте несколько известных строк и выполните пробное сохранение в новый файл. Затем закройте программу и откройте результат заново. Для базы используйте штатный экспорт или тестовую копию, а не произвольное перекодирование её файлов.
Сравните другие необходимые старые приложения. Исправление одного сценария не должно незаметно испортить работу соседнего. Если изменение не помогло, верните исходные параметры и сохраните наблюдения.
Для обращения за помощью нужны версия программы, системная локаль, состояние UTF-8-флажка, происхождение документа и точное место искажения: меню, чтение или новая запись. Эти данные позволяют продолжить проверку без угадывания по одной фотографии букв.
Схема редакции «Мы из 90х».