はじめに
Microsoft Windows Powershell(以下Powershell
)コマンドの実行結果をIOリダイレクトでファイルに書き出すことはよくあります。この時書き出したファイルはデフォルト状態のエンコーディングであるBOM付きUNICODE(UTF-16)
で出力されます。これが場合によっては文字化けする場合があります。
そこで、ここでは、Powershellコマンドでのファイル書き出しで文字化けをさせない方法をご紹介します
結論
Powershellコマンドの実行前に以下のコマンドで文字化けしないエンコードを設定してください。
Powershellのファイル出力エンコードを設定するコマンド
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
- Powershellのデフォルトパラメータ値セット
$PSDefaultParameterValues
のファイル出力エンコードOut-File:Encoding
パラメータに文字化けしないエンコードを設定します - ここではUTF-8エンコードを設定するために設定値を
utf8
としています
経緯
文字化けする例
TypeScript実行環境Deno
で動作するアプリのログをマークダウンファイルに書き出す以下のようなコマンドでマークダウンファイルが文字化けしました。
文字化けが発生したPowershellコマンドの例
deno run -A --unstable .\app.ts > ./output/sample.md
やりたかったこと
出力したマークダウンファイルはそのままWikiサービスでWebブラウザに表示させる必要があります。ですので、ファイルのエンコードはUTF-8
であってほしかったのです
でも実際は・・
しかし、実際にはUTF-16
で出力されて見事に文字化けしてしまいました。Google検索でいろいろな方法が紹介されていましたが、どれもわたしの場合には失敗しました。そこでようやくたどりついたのがこの記事でご紹介している方法です
成功したコマンド
文字化けしないPowershellコマンドの例
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
deno run -A --unstable .\app.ts > ./output/sample.md