UTF-16ではなくUTF-8を出力するデフォルトのPowerShell


31

既定では、WindowsのPowerShellはUTF-16を出力しているようです(たとえば、単純echo hello > hi.txtにを実行するとhi.txt、UTF-16になります)。代わりにを実行することで、これを目的のテキストエンコードに強制できることを知っていecho hello | out-file -encoding utf8 hi.txtますが、リダイレクト演算子を使用するときはそれをデフォルトにするだけです。これを達成する方法はありますか?


1
代替のヒントをありがとう、ターミナルからこれを行うことは、時にはテキストエディタよりも速くなることがあります。
トッドパートリッジ

Powershell 6.0では、これは不要になりました-Powershellは、リダイレクト用のエンコードなしでデフォルトでUTF-8になりました。参照github.com/PowerShell/PowerShell/issues/4878
kumarharsh

回答:


21

System.Management.Automationアセンブリ(別名「Microsoft Windows PowerShell Engine Coreアセンブリ」)で.NETデコンパイラを使用すると、次のコードフラグメントが明らかになります。

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

だから、私にはかなりハードコードされています。

参考までに、これはPowerShell 2.0がインストールされたWindows 7 Enterprise x64システムでのことです。


5
残念ながら、Windows 10上のPowerShell 5ではまだハードコードされていますCommandParameterInternal.CreateParameterWithArgument(PositionUtilities.EmptyExtent, "Encoding", "-Encoding:", PositionUtilities.EmptyExtent, "Unicode", false, false);
。– Artfunkel

3

これがあなたが探しているものを正確に行うかどうかはわかりませんが、ここで述べたように環境変数を設定してみることができます

$OutputEncoding = New-Object -typename System.Text.UTF8Encoding

2
私は$OutputEncoding必要なものだとは思いません。PowerShellでASCIIに設定され、物事の表示方法に影響します。私がやりたいのは、ファイルに保存されているテキストの形式を変更することです。これは(AFAICT)が$OutputEncoding制御するものとは異なります。
ベンジャミンポラック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.