Вызов и оператор powershell: установите выходную кодировку - PullRequest
2 голосов
/ 11 января 2020

При непосредственном выполнении все работает как положено:

& git status

# OK: "modified:   awél.txt"

Сохранение в переменной

$aargh = & git status
$aargh

# NOT OK: "modified:   aw├®l.txt"

Как узнать, какую кодировку использовать?

1 Ответ

2 голосов
/ 11 января 2020

Проблемы с кодировкой символов обычно не возникают, если вы выводите вывод внешней программы на экран , но могут возникать, если вы захватываете или отправляете его другой команде через конвейер, потому что PowerShell декодирует вывод в. NET строки в процессе.

Чтобы PowerShell правильно распознал вывод git, необходимо:

  • знает, какую кодировку символов git использует в своих выходных данных

  • и установите [Console]::OutputEncoding в эту кодировку (для Windows по умолчанию используется устаревшая кодовая страница OEM вашей системы).

git использует UTF-8, поэтому вы должны выполнить следующие до захвата git вывода:

[Console]::OutputEncoding = [System.Text.Encoding]::Utf8

Обратите внимание, что если вам [нужно] использовать & для вызова внешней программы, то не имеет значения в отношении кодировки символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...