#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'