Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

By default, PowerShell in Windows seems to be outputting UTF-16 (e.g., if I do a simple echo hello > hi.txt, then hi.txt ends up in UTF-16). I know that I can force this to my desired text encoding by instead doing echo hello | out-file -encoding utf8 hi.txt, but what I'd like is for that to just be the default when I use the redirection operator. Is there any way to achieve this?

share|improve this question
up vote 18 down vote accepted

Using a .NET decompiler on the System.Management.Automation assembly (a.k.a. the "Microsoft Windows PowerShell Engine Core Assembly") reveals this code fragment:

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

So, it looks pretty hardcoded to me.

FYI, this was on Windows 7 Enterprise x64 system with PowerShell 2.0 installed.

share|improve this answer
Still hard-coded in PowerShell 5 on Windows 10, unfortunately: CommandParameterInternal.CreateParameterWithArgument(PositionUtilities.EmptyExt‌​ent, "Encoding", "-Encoding:", PositionUtilities.EmptyExtent, "Unicode", false, false); – Artfunkel Sep 17 '15 at 9:00

Not sure if this will do exactly what you're looking for, but you can try setting the environment variable as mentioned here

$OutputEncoding = New-Object -typename System.Text.UTF8Encoding
share|improve this answer
I don't think $OutputEncoding is quite what I need; that's set to ASCII in PowerShell, and affects how things are displayed. What I want to do is to change the format of text that's saved in a file, which (AFAICT) is different than what $OutputEncoding controls. – Benjamin Pollack Nov 16 '12 at 15:49

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.