Общий совет - сохранить файл .ps1
в кодировке UTF-8 с спецификацией , когда задействованы международные символы.
Powershell v5.1 и ранее предполагалось, что .ps1
файлы без спецификации (метка порядка байтов) должны быть закодированы в кодовой странице Windows -1252 . На странице do c :
PowerShell 5.1 и ниже по умолчанию используется кодировка Windows -1252, когда нет спецификации.
Из соображений совместимости лучше всего сохранять скрипты в формате Unicode с BOM.
[ EDIT ] Официальная документация, приведенная выше, кажется неправильной, как указано @ mklement0 в комментарии (и сообщил в MS). PowerShell по умолчанию использует общесистемную кодовую страницу ANSI , вместо этого, часто, но не обязательно, Windows -1252. [ конец EDIT ]
OP написал в комментарии:
[ файл .ps1 ] уже был UTF8 закодировано, я переключился на ANSI, и теперь мой XML правильный
Это сработало в этом случае , потому что символ ô
существует в Windows -1252 (ANSI) кодовая страница.
Однако сохранение файла .ps1
как ANSI по-прежнему приведет к сбою для символов вне кодовой страницы Windows -1252. Например, следующее не удастся, если скопировать / вставить в файл .ps1
, сохраненный с кодировкой ANSI, но будет работать, если будет сохранен как UTF-8 с спецификацией.
$xmlDoc = [XML](Get-Content "C:\MesInterface.config")
$xmlDoc.configuration.ContrôleFlan.lastId = "αß©∂€"
$xmlDoc.Save("C:\MesInterface.config")