Неправильная кодировка PowerShell при записи в файл - PullRequest
1 голос
/ 31 января 2020

Я делаю простой скрипт PowerShell для запуска с помощью планировщика заданий. Сценарий должен создать файл, запустить .exe-программу и перенаправить весь вывод во вновь созданный файл.

Вот как теперь выглядит мой скрипт:

# script.ps1
$LogFile = "C:\a\very\long\path\to\logfile.log"
C:
cd 'C:\path\to\exe\directory\' > $LogFile
.\program.exe > $LogFile

Программа выводит символы немецкого алфавита: Ää Öö Üü ß. Когда я запускаю программу без записи в файл, она выводит символ так, как должен: ä, ü. Однако, когда я перенаправляю вывод в файл журнала, ä превращается в õ, а ü превращается в ³.

Я пытался добавить chcp 65001 и $PSDefaultParameterValues = @{ '*:Encoding' = 'utf8' }, но это не помогло. не имеет никакого эффекта.

Как ни странно, эта проблема возникает только в PowerShell. Подобный скрипт в Batch не имеет этой проблемы. Есть ли способ исправить это в PowerShell?

PS Моя версия PowerShell 5.1

1 Ответ

0 голосов
/ 31 января 2020

Из PowerShell внешняя кодировка (.exe) управляется [Console]::OutputEncoding. Если вы хотите UTF8, то это свойство должно иметь кодировку UTF8.

$BackupEncoding = [Console]::OutputEncoding
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
.\program.exe > $LogFile
[Console]::OutputEncoding = $BackupEncoding

Примечание: Вышеупомянутое решение - UTF8 с спецификацией. В PowerShell Core 6.2+ и PowerShell 7 в этих случаях кодировкой по умолчанию является UTF8 без спецификации.

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