Как исправить проблемы с кодировкой внешних строк в powershell?

#powershell #utf-8 #utf-16

#powershell #utf-8 #utf-16

Вопрос:

У меня есть следующая команда:

 amp; wsl --exec bash -c "echo Hello" | Out-String
  

который возвращает в консоли Powershell совершенно странную форматированную строку:

 P l e a s e   e n a b l e   t h e   V i r t u a l   M a c h i n e   P l a t f o r m   W i n d o w s   f e a t u r e   a n d   e n s u r e   v i r t u a l i z a t i o n   
i s   e n a b l e d   i n   t h e   B I O S .


 F o r   i n f o r m a t i o n   p l e a s e   v i s i t   h t t p s : / / a k a . m s / w s l 2 - i n s t a l l
  

Как я могу исправить эти проблемы с кодировкой? Когда я записываю его в файл, amp; wsl --exec bash -c "exit 0" | Out-String > Log он содержит carbage unicode (пробел выше), и я не знаю, какая это кодировка:

Комментарии:

1. Внутренняя кодировка для .Net (и, следовательно, Powershell) — UTF 16. Таким образом, ‘a’ на самом деле 0x0061 , а нули становятся пробелами.

2. Связанные: github.com/microsoft/terminal/issues/110

Ответ №1:

Используйте Out-File -FilePath YOUR_OUTPUT_PATH -Encoding utf8 вместо этого.

Ответ №2:

Установите значение среды по умолчанию:

 $PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'