По умолчанию PowerShell в Windows, похоже, выводит UTF-16 (например, если я сделаю простой echo hello > hi.txt
, то hi.txt
в UTF-16). Я знаю, что могу принудительно установить нужную кодировку текста, выполнив echo hello | out-file -encoding utf8 hi.txt
, но мне бы хотелось, чтобы это было просто по умолчанию при использовании оператора перенаправления. Есть ли способ добиться этого?
30
2 ответа
21
Использование .NET декомпилятора в Системе.Управление.Сборка автоматизации (также известная как "Сборка ядра Microsoft Windows PowerShell Engine") раскрывает этот фрагмент кода:
// class: System.Management.Automation.RedirectionNode
private PipelineProcessor BuildRedirectionPipeline(string path, ExecutionContext context)
{
CommandProcessorBase commandProcessorBase = context.CreateCommand("out-file");
commandProcessorBase.AddParameter("-encoding", "unicode");
if (this.Appending)
{
commandProcessorBase.AddParameter("-append", true);
}
commandProcessorBase.AddParameter("-filepath", path);
...
Так что это выглядит довольно жестко для меня.
К вашему сведению, это было в Windows 7 Enterprise x64 с установленной PowerShell 2.0.
3
Не уверен, что это будет именно то, что вы ищете, но вы можете попробовать установить переменную среды, как указано здесь
$OutputEncoding = New-Object -typename System.Text.UTF8Encoding