Default PowerShell to emitting UTF-8 instead of UTF-16?
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?
Solution 1:
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.
Solution 2:
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