Powershell. Исправить шрифт в консоли ISE

Можно заметить, что используя утилиты CMD в консоли ISE кириллица выводится кракозябрами, а в Powershell.exe — такая проблема не наблюдается.
Давайте выясним что является этому причиной

Например при попытке получить результат команды

& "ping" ya.ru

мы увидим такую картину

Посмотрим кодировку в обоих консолях следующей командой

[Console]::outputEncoding
ISE
Powershell

Теперь посмотрим текущую страницу кодировки (CP) в CMD

chcp
Вывод

Как мы убедились, кодировки СMD и Powershell.exe совпадают, а ISE в свою очередь использует Windows-1251

Соответственно ISE ожидает что на вход ему и будут попадать символы в кодировке 1251, а по факту CMD пытается передать их в кодировке DOS — cp866

Решение

Решение достаточно простое — поменять используемую кодировку консоли ISE на cp866 командой:

[Console]::outputEncoding = [System.Text.Encoding]::GetEncoding('cp866')

После этого повторно выполняем нужную нам команду и получаем приемлемый результат

Вы можете получить ошибку следующего вида

Исключение при задании "outputEncoding" : "Неверный дескриптор.

Что бы смена кодировки применилась успешно, нужно предварительно выполнить любую CMD команду, которая вернет вам текстовый вывод кракозябрами.

Опять же подойдет Ping, так как при вызове Ping Powershell сразу обращается к Legacy утилите из System32, а не какому то своему встроенному механизму.

После этих действий команда на смену кодировки успешно отработает

3 мысли о “Powershell. Исправить шрифт в консоли ISE”

  1. Для PowerShell 7, если иероглифы к примеру в nslookup
    [Console]::outputEncoding = [System.Text.Encoding]::GetEncoding(‘windows-1251’)

    1. Ну если говорить про Powershell 7 в приложении Terminal или VSC, так же как и в консоли powershell.exe, там по умолчанию кодировка cp866, поэтому можно привести к windows-1251

Добавить комментарий

Ваш адрес email не будет опубликован.