PowerShell padrão para emitir UTF-8 em vez de UTF-16?

29

Por padrão, o PowerShell no Windows parece estar exibindo o UTF-16 (por exemplo, se eu faço um simples echo hello > hi.txt , o hi.txt acaba em UTF-16). Eu sei que posso forçar isso para minha codificação de texto desejada, fazendo em vez disso echo hello | out-file -encoding utf8 hi.txt , mas o que eu gostaria é que seja apenas o padrão quando eu uso o operador de redirecionamento. Existe alguma maneira de conseguir isso?

    
por Benjamin Pollack 24.08.2011 / 17:35

2 respostas

21

Usar um decompilador .NET no conjunto System.Management.Automation (também conhecido como "Conjunto Principal do Mecanismo do Microsoft Windows PowerShell") revela esse fragmento de código:

// 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);
    ...

Então, parece bastante codificado para mim.

FYI, isso foi no sistema Windows 7 Enterprise x64 com o PowerShell 2.0 instalado.

    
por 17.01.2013 / 19:05
3

Não tenho certeza se isso fará exatamente o que você está procurando, mas você pode tentar definir a variável de ambiente como mencionado aqui

$OutputEncoding = New-Object -typename System.Text.UTF8Encoding
    
por 24.08.2011 / 17:54