n1ro°
RU

Текст и данные · Инструкция

Как изменить кодировку файла в VS Code

Если русский текст открылся «кракозябрами», важно не спешить нажимать Save.

Редакция N1RO · Проверено

Короткий ответ

При неправильном отображении сначала нажмите индикатор кодировки в строке состояния и выберите Reopen with Encoding, найдя исходную кодировку. Только когда текст читается правильно, используйте Save with Encoding → UTF-8, если действительно хотите конвертировать файл.

Почему Reopen и Save решают разные задачи

Кодировка задаёт соответствие между байтами файла и символами. Если файл записан, например, не в UTF-8, а редактор прочитал его как UTF-8, на экране появляются неверные символы. В этом случае проблема существует уже на этапе чтения: сохранение с новой кодировкой может зафиксировать испорченный текст и сделать восстановление сложнее. Поэтому первый безопасный шаг — Reopen with Encoding. VS Code перечитывает исходные байты с выбранной таблицей символов, не пытаясь сначала преобразовать их. Когда кириллица, кавычки и специальные знаки выглядят правильно, можно решать, оставить исходную кодировку или сделать миграцию. Save with Encoding нужен именно для второго сценария: он берёт уже корректно отображаемый текст и записывает его в выбранном формате. Эти команды доступны через индикатор encoding в строке состояния, а глобальную или workspace-кодировку можно задавать настройкой `files.encoding`.

Важно: Если файл уже отображается неправильно, не делайте Save «на пробу». Сначала создайте копию или используйте систему контроля версий.

Безопасная последовательность смены кодировки

  1. Если файл под Git, убедитесь, что есть чистая исходная версия или сделайте резервную копию. Это защищает от необратимого сохранения испорченных символов.
  2. Откройте файл и нажмите текущую кодировку в строке состояния. Выберите Reopen with Encoding, а затем предполагаемую исходную кодировку.
  3. Проверьте не одну строку, а разные участки: кириллицу, длинное тире, кавычки, символы валют, комментарии и данные. Частично совпадающие таблицы могут маскировать ошибку.
  4. Если текст корректен и требуется перейти на UTF-8, снова нажмите индикатор кодировки, выберите Save with Encoding и нужный вариант UTF-8.
  5. Просмотрите Git diff. Нормальная перекодировка может затронуть представление байтов, но содержимое текста не должно превращаться в массовые замены символов или `�`.
  6. Если проект должен всегда открывать такие файлы одинаково, установите `files.encoding` на уровне Workspace или Folder, а не обязательно глобально для всех проектов.

Предупреждение: Не путайте UTF-8 и UTF-8 with BOM в системах, где BOM имеет значение. Следуйте требованиям проекта или потребителя файла.

Reopen with Encoding или Save with Encoding

  • Текст уже отображается кракозябрами. Reopen with Encoding. Нужно правильно интерпретировать исходные байты
  • Текст читается нормально, но формат файла надо изменить. Save with Encoding. Нужно записать символы в новой кодировке
  • Все файлы проекта должны открываться одинаково. files.encoding в Workspace. Правило применяется при открытии файлов проекта
  • Неизвестна исходная кодировка. Перебирать Reopen с копией файла. Сохранение до распознавания может повредить данные

Что делать, если неизвестно, в какой кодировке файл

Автоматическое угадывание кодировки не является математически точным: короткий ASCII-файл вообще не содержит достаточно информации, чтобы отличить многие варианты, а некоторые однобайтовые кодировки дают правдоподобный, но неверный текст. Поэтому ориентируйтесь на происхождение файла. Старые Windows-программы для русскоязычных данных часто использовали Windows-1251; старые Unix-системы могли использовать KOI8-R; современные проекты обычно стандартизируются на UTF-8. В VS Code можно включить auto guessing, но результат всё равно нужно проверять глазами на характерных символах. Хороший тест — найти слова с `ё`, кавычки, длинные тире, спецсимволы и смешанный русский/латинский текст. Если в файле бинарные данные или он был уже испорчен предыдущим сохранением, простая смена encoding не восстановит потерянные байты. Тогда безопаснее вернуться к исходной копии из Git, backup или источника выгрузки и повторить процедуру чтения с правильной кодировкой.

Совет: Кодировка — свойство байтов файла, а не «шрифт». Смена шрифта не исправляет неверно декодированный текст.

Как не устроить массовую перекодировку всего репозитория

Устанавливая `files.encoding` на уровне User, вы влияете на разные проекты, в том числе старые репозитории с особыми требованиями. Если правило относится только к одному workspace, храните его в настройках проекта или используйте конфигурацию инструментов сборки, которые создают эти файлы. Перед массовым преобразованием сначала перекодируйте один репрезентативный файл и прогоните тесты/сборку. Некоторые компиляторы, CSV-импортёры, legacy API и внешние устройства ожидают конкретную кодировку; «UTF-8 везде» обычно полезная цель, но она должна быть согласована с потребителем. Отдельно проверьте line endings: перекодировка и CRLF/LF — разные изменения, и их одновременная нормализация делает diff огромным. Лучше менять один параметр за раз, чтобы code review показывал понятную причину изменений и при необходимости можно было откатить только кодировку.

Важно: Если внешний сервис требует конкретную legacy-кодировку, не конвертируйте файл только ради удобства редактора — настройте корректное открытие.

Почему смену кодировки нужно проверять вне редактора

То, что текст после Save with Encoding выглядит правильно в VS Code, ещё не гарантирует совместимость с внешней системой. Если файл читает скрипт, компилятор, импортёр или старое оборудование, выполните реальный цикл чтения после сохранения. Для CSV и конфигураций особенно важны не только символы кириллицы, но и ожидаемый BOM и правила конкретного потребителя. Не конвертируйте пакет файлов вслепую: начните с копии одного файла и сравните результат. Если источник генерирует файл автоматически, лучше изменить кодировку на стороне генератора, иначе ручное исправление будет отменено следующим запуском.

Признаки успешной конвертации

  • До сохранения текст корректно отображался после Reopen with Encoding.
  • После Save with Encoding и повторного открытия символы не изменились.
  • Git diff не содержит `�` и случайных замен кириллицы.
  • Сборка/импортёр/внешняя система принимает файл.
  • Правило кодировки задано в подходящем scope, а не навязано всем проектам.

Что учитывать

Кодировка задаёт соответствие между байтами файла и символами. Если файл записан, например, не в UTF-8, а редактор прочитал его как UTF-8, на экране появляются неверные символы. В этом случае проблема существует уже на этапе чтения: сохранение с новой кодировкой может зафиксировать испорченный текст и сделать восстановление сложнее. Поэтому первый безопасный шаг — Reopen with Encoding. VS Code перечитывает исходные байты с выбранной таблицей символов, не пытаясь сначала преобразовать их. Когда…

Источники и проверка

Фактическая часть сверена по первичным источникам (в т.ч. Basic editing). Пример и формулировки — редакция N1RO на 2026-09-20.