Проблема возникает только в PowerShell ISE , когда вывод из внешних программ, таких как tree.com
, не передается прямо к консоли.
Чтобы исправить это, необходимо (временно) изменить [Console]::OutputEncoding
, чтобы он соответствовал активной кодовой странице действующего OEM вашей системы , поскольку для кодировки символов tree.com
используется:
# Switch the encoding that PowerShell expects external programs to use
# to the active OEM code page.
[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding(
[cultureinfo]::CurrentCulture.TextInfo.OEMCodePage
)
# tree.com now produces the expected output in the ISE
tree
Примечание:
Даже в обычном консольном окне / Windows Окно терминала и в коде Visual Studio [Console]::OutputEncoding
может войти в игру, но только когда вы захватываете или перенаправляете вывод внешней программы (например, $treeOutput = tree
или tree | ...
).
- Как указано выше, это , а не , необходимый для прямого вывода на дисплей - за исключением ISE, где
[Console]::OutputEncoding
имеет значение даже тогда, которое по умолчанию активно для системы ANSI устаревшая кодовая страница.
Для правильной работы PowerShell rpret выходные данные внешней программы при захвате или перенаправлении, [Console]::OutputEncoding
должно соответствовать фактическому кодированию, используемому этой программой .
Поэтому, если вы хотите захватить или перенаправить tree.com
s вывод, вам может необходимо установить [Console]::OutputEncoding
:
Короче говоря, если [Console]::OutputEncoding.CodePage
не соответствует коду номер страницы, сообщаемый [cultureinfo]::CurrentCulture.TextInfo.OEMCodePage
- например, 437
в системах US-Engli sh - настройка [Console]::OutputEncoding
необходима .
In console windows и Windows Terminal windows это обычно , а не необходимо (начиная с PowerShell 7.0) - это необходимо, только если вы явно указали например, изменил активную кодовую страницу на UTF-8 - см. этот ответ ; обратите внимание, что UTF-8 может стать по умолчанию со временем.
В Код Visual Studio , однако, является необходимым по умолчанию, поскольку в интегрированной консоли PowerShell [Console]::OutputEncoding
по умолчанию используется UTF-8 (кодовая страница 65001
).