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