PowerShell интерпретирует исходный код файла .ps1 при его чтении, но не обязательно в ожидаемой кодировке.
Когда вы сохраняете файл как UTF-8, но по умолчанию PowerShell - Windows-1252затем ü
становится ü
еще до того, как ваш код запустится. Send-MailMessage
затем корректно кодирует ü
в UTF-8, поэтому эти символы сохраняются в электронном письме. Когда вы запускаете программу из кода Visual Studio, применяются разные значения по умолчанию, и результат отличается.
Я не думаю, что есть переключатель командной строки, который заставляет PowerShell интерпретировать файлы сценариев в определенной кодировке, новы можете помочь с автоматическим определением кодировки, добавив к файлу префикс с меткой порядка байтов (BOM).
Спецификация является обязательной для UTF-16 (то, что обычно называют кодировкой «Unicode» в различных Microsoftинструменты), но необязательно в UTF-8. Спецификации UTF-8 неправильны во многих случаях использования, поэтому по умолчанию для кода VS указано «UTF-8 без спецификации». Когда вы явно сохраняете файл как «UTF-8 с спецификацией», Powershell выводит правильную кодировку при чтении сценария.
Существует способ настроить VS Code для выбора определенных кодировок для каждого типа файла, вы можетеустановите для него постоянное сохранение файлов .ps1 как UTF-8 с спецификацией.
Альтернативой может быть сохранение файла в формате Windows-1252, что будет соответствовать ожиданиям PowerShell на вашем компьютере, но может сломаться на других компьютерах (или при запуске из кода VS).