UTF8 Script в PowerShell выводит неверные символы

Я создал UTF8 script для PowerShell с символами без ascii.

characters.ps1:

Write-Host "ç â ã á à"

Когда script запускается в консоли PowerShell, он выводит неправильные символы.

enter image description here

Однако, если я пишу символы непосредственно в консоли, они отображаются как ожидалось:

enter image description here

Кто-нибудь знает, что вызывает это поведение?

Проблема возникла из script, я написал, у кого есть жестко заданные пути, которые включают символы не-ascii. Когда я пытаюсь передать путь в качестве аргумента в командлеты (в случае, когда я собираюсь скопировать папку), команда не работает, потому что она не может найти путь (который неправильно выводится на экран).

Ответы

Ответ 1

Изменение кодировки script в UTF-8 с помощью спецификации решило проблему.

Я использовал SublimeText с плагином EncodingHelper для управления набором символов script. Он правильно настроен для UTF8.

Я изменил кодировку script в SublimeText на "UTF-8 с спецификацией", и результат был показан правильно.

Я создал тот же script с Notepad ++, который по умолчанию имеет значение "UTF-8 с спецификацией", и строка была показана правильно в консоли.

Я изменил кодировку script в Notepad ++ на "UTF-8 без спецификации", и это было показано неправильно.

Кажется, что PowerShell не может правильно предсказать кодировку файлов UTF-8 без спецификации.

Ответ 2

В моем случае проблема была вызвана созданием нового PowerShell script с кодом Visual Studio, который имеет кодировку UTF-8 по умолчанию. Установите кодировку на "Windows 1252", решив проблему.

Кажется, что PowerShell не может обрабатывать UTF-8, ему нужна кодировка "Windows 1252".

Ответ 3

попробуйте сделать это перед вызовом script:

 $OutputEncoding = [Console]::OutputEncoding