Как в PowerShell 5.1 навсегда установить кодировку вывода по умолчанию на UTF-8?

Набор операций у меня привычный: создать файл, скопировать, переместить, изменить структуру, добавить или заменить фрагмент текста, иногда залить на хостинг. При этом по умолчанию кодировка (а иногда и несколько кодировок, в зависимости от операции и метода) часто некорректна. Сам с этим не справился, но на одном из зарубежных ресурсов нашёл такое:
  • 11 апреля 2026 г. 21:03
Ответы на вопрос 3
Коротко — полностью «одной галочкой» в Windows PowerShell 5.1 глобально переключить всё на UTF‑8 нельзя (поведение кодировок разрозненно: консоль, переменные $OutputEncoding, и поведение cmdlet‑ов — разные вещи). Но достаточно надёжный и практичный способ — положить в профиль PowerShell набор команд, который:

- устанавливает кодировку ввода/вывода консоли в UTF‑8,
- задаёт $OutputEncoding (для внешних процессов/редиректов),
- устанавливает значение по‑умолчанию для часто используемых cmdlet’ов (Out‑File, Set‑Content, Add‑Content, Export‑Csv и т.д.).

Примерный код, который положите в ваш профиль ($PROFILE):

1) Откройте профиль (создайте, если ещё нет):
notepad $PROFILE
(если файл не существует — Notepad предложит создать)

2) Вставьте туда (и сохраните):

# Консоль и внешние процессы — UTF-8
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
[Console]::InputEncoding  = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8

# По умолчанию для популярных cmdlet'ов — UTF‑8
$PSDefaultParameterValues['Out-File:Encoding']      = 'utf8'
$PSDefaultParameterValues['Set-Content:Encoding']    = 'utf8'
$PSDefaultParameterValues['Add-Content:Encoding']    = 'utf8'
$PSDefaultParameterValues['Export-Csv:Encoding']     = 'utf8'
$PSDefaultParameterValues['ConvertTo-Html:Encoding'] = 'utf8'

После этого перезапустите PowerShell — новое поведение будет действовать автоматически для этой учётной записи и этого хоста PowerShell.

Важные замечания и ограничения
- В PowerShell 5.1 значение 'utf8' часто создаёт UTF‑8 с BOM. Если вам нужен UTF‑8 без BOM, PowerShell 5.1 штатно не очень удобно это сделать через -Encoding. Обходные пути: использовать .NET напрямую, например:
  [System.IO.File]::WriteAllText($path, $text, (New-Object System.Text.UTF8Encoding $false))
  либо писать свои обёртки/функции.
- [Console]::OutputEncoding управляет кодировкой вывода .NET/PowerShell. Старые консольные/нативные приложения могут по‑прежнему использовать OEM‑кодировку консоли — для них можно выполнить chcp 65001 (в профиле), но это не всегда исправит поведение всех приложений.
- Cmdlet'ы по умолчанию в 5.1 (Set-Content/Out-File/...) раньше по умолчанию писали в UTF‑16LE (Unicode) или использовали Default/OEM в зависимости от cmdlet. Поэтому PSDefaultParameterValues рекомендуется для унификации.
- Если хотите сделать изменение «для всех пользователей», редактируйте профиль AllUsersCurrentHost (путь в $PROFILE.AllUsersCurrentHost) с правами администратора.

Проверка
После перезапуска:
[Console]::OutputEncoding     # должен быть UTF‑8
Write-Output 'тест' | Out-File test.txt
Get-Content test.txt          # посмотрите содержимое/кодировку файла

Если нужно, могу прислать шаблон профиля с функциями, которые пишут UTF‑8 без BOM, и/или показать, как правильно настроить Export‑Csv/Import‑Csv и работу с FTP/HTTP при загрузке на хостинг.
включил эту галку больше года назад, полёт нормальный. ломается только ancient-софт который через ANSI API работает и ожидает cp1251, типа старых банк-клиентов, некоторых кривых инсталляторов. для твоих задач (файлы, текст, хостинг) — вообще без проблем. профиль который нашёл рабочий, только chcp 65001 после галки лишний, система сама ставит 65001.
Это заморочка, ps5 умеет читать легко UTF, только нужно BOM поставить в тексте и все твои проблемы сразу решаться. <br/>
Похожие вопросы