locked
Powershell ISE 3.0 Проблемы с кодировкой RRS feed

  • Вопрос

  • Доброго времени суток!

    В PowerShell ISE при выполнении команд командной строки выходят каракули, хотя в самой консоли PowerShell всё работает нормально.

    По умолчанию кажется 866 кодировка. Ставлю 1251 тоже самое. Ставлю 65001 всё выходит на английском, а хочется на русском!

    25 декабря 2012 г. 10:21

Ответы

  • Хорошо, но к каждой команде такое добавлять не совсем рационально. Есть возможность в начале файла ввести команду на смену кодировки и чтобы в дальнейшем всё уже в этой кодировке было? Наподобие команды chcp

    Попробовать: 

    [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("cp866")

    [console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("cp866")

    • Помечено в качестве ответа KazunEditor 3 января 2013 г. 11:32
    26 декабря 2012 г. 7:01
    Отвечающий
  • у меня проблема та же, хотя в эту ветку походу писать на (Windows 7 и Windows 8 обе RU), в тот профиль что в Documents добавлял - результата нет... если каждый раз вводить - помогает на сесию, при перезагрузке исе опять то же самое, как починить это, кто поможет?

    C:\Users\UserName\Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1

    В профиле:

    ipconfig  | Out-Null
    [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("cp866")

    • Предложено в качестве ответа Neutriievskyi Volodymyr 18 ноября 2013 г. 6:24
    • Помечено в качестве ответа Vector BCOModerator 14 января 2021 г. 13:51
    18 ноября 2013 г. 5:03
    Отвечающий

Все ответы

  • Единственное решение,которое я знаю -  это использовать функцию ConvertTo-Encoding от Василия Гусева:

    function ConvertTo-Encoding ([string]$From, [string]$To){
    	Begin{
    		$encFrom = [System.Text.Encoding]::GetEncoding($from)
    		$encTo = [System.Text.Encoding]::GetEncoding($to)
    	}
    	Process{
    		$bytes = $encTo.GetBytes($_)
    		$bytes = [System.Text.Encoding]::Convert($encFrom, $encTo, $bytes)
    		$encTo.GetString($bytes)
    	}
    }

    ipconfig | ConvertTo-Encoding cp866 windows-1251 -Encoding cp866 windows-1251


    • Изменено KazunEditor 25 декабря 2012 г. 11:06
    25 декабря 2012 г. 11:04
    Отвечающий
  • Хорошо, но к каждой команде такое добавлять не совсем рационально. Есть возможность в начале файла ввести команду на смену кодировки и чтобы в дальнейшем всё уже в этой кодировке было? Наподобие команды chcp.

    Или чтобы эту функцию ConvertTo-Encoding использовать для текущего процесса, т.е. PowerShell`a

    26 декабря 2012 г. 6:52
  • Хорошо, но к каждой команде такое добавлять не совсем рационально. Есть возможность в начале файла ввести команду на смену кодировки и чтобы в дальнейшем всё уже в этой кодировке было? Наподобие команды chcp

    Попробовать: 

    [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("cp866")

    [console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("cp866")

    • Помечено в качестве ответа KazunEditor 3 января 2013 г. 11:32
    26 декабря 2012 г. 7:01
    Отвечающий
  • Попробовать: 

    [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("cp866")

    [console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("cp866")

    Спасибо. Помогло. 

    От себя хочу добавить: чтобы каждый раз не вводить это - то можно добавить к файлу загрузки консоли или ISE (кому что больше нравится)

    А вот как это сделать - не скажу. Не правил. Не интересовался. Инфу брал из книжки Powershell for Dummies


    • Изменено esqado 11 января 2013 г. 20:38
    11 января 2013 г. 20:37
  • Спасибо. Помогло. [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("cp866")

    Однако при новом запуске приходится делать то же самое.

    • Изменено n.pakhomov 7 сентября 2013 г. 15:59
    7 сентября 2013 г. 15:57
  • у меня проблема та же, хотя в эту ветку походу писать на (Windows 7 и Windows 8 обе RU), в тот профиль что в Documents добавлял - результата нет... если каждый раз вводить - помогает на сесию, при перезагрузке исе опять то же самое, как починить это, кто поможет?
    15 ноября 2013 г. 14:33
  • у меня проблема та же, хотя в эту ветку походу писать на (Windows 7 и Windows 8 обе RU), в тот профиль что в Documents добавлял - результата нет... если каждый раз вводить - помогает на сесию, при перезагрузке исе опять то же самое, как починить это, кто поможет?

    C:\Users\UserName\Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1

    В профиле:

    ipconfig  | Out-Null
    [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("cp866")

    • Предложено в качестве ответа Neutriievskyi Volodymyr 18 ноября 2013 г. 6:24
    • Помечено в качестве ответа Vector BCOModerator 14 января 2021 г. 13:51
    18 ноября 2013 г. 5:03
    Отвечающий
  • сработало))

    а что дает эта конструкция ipconfig  | Out-Null  ? А то я и раньше туда же добавлял, но то не срабатывала строка вообще (редко) то выдавала какую то ошибку(почти постоянно)...

    спасибо)

    18 ноября 2013 г. 6:23
  • сработало))

    а что дает эта конструкция ipconfig  | Out-Null  ? А то я и раньше туда же добавлял, но то не срабатывала строка вообще (редко) то выдавала какую то ошибку(почти постоянно)...

    спасибо)

    Я не смог найти ответ на данное поведение в PowerShell ISE. Но [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("cp866") работает всегда, если сначала вызвать внешнюю команду (ping,route,ipconfig и т.д). 
    18 ноября 2013 г. 6:35
    Отвечающий
  • интересно, конечно, а то я думаю к чему там ipconfig )))
    18 ноября 2013 г. 14:39
  • Помогает команда [Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("cp866"), но после закрытия PowerShell ISE, опять каракули и нужно вводить? Можно как-нибудь применить навсегда?

    Проблема с Windows Server 2019 Enterprise и Windows 10 Корпоративная LTSC

    14 января 2021 г. 11:11
  • решений несколько:

    1 не использовать англоязычные ос  в админ целях

    2 решение с профилем о котором вспоминал esqado и детально описанное by Kazun

    3 не использование ISE.

    В качестве замены существует например VSCode или VS Comunity в которых куда удобней работать чем в ISE. Первый бесплатный, второй бесплатный но имеет лицензионные ограничения на размер команды разработчиков и компании.


    The opinion expressed by me is not an official position of Microsoft


    14 января 2021 г. 13:55
    Модератор