30

По умолчанию PowerShell в Windows, похоже, выводит UTF-16 (например, если я сделаю простой echo hello > hi.txt , то hi.txt в UTF-16). Я знаю, что могу принудительно установить нужную кодировку текста, выполнив echo hello | out-file -encoding utf8 hi.txt , но мне бы хотелось, чтобы это было просто по умолчанию при использовании оператора перенаправления. Есть ли способ добиться этого?

2 ответа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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .