【PowerShell】Select-StringやOut-Fileの文字化けに立ち向かう

【PowerShell】Select-StringやOut-Fileの文字化けに立ち向かう

はじめに

コジマです。

※この記事は備忘録的な感じです。

Select-Stringで条件満たす行を取得してOut-Fileでファイルにリダイレクトする
なんてことをやりたくてスクリプト組んでいたのですが、
日本語が文字化けしてなかなかうまくいきませんでした。

Select-String "TEST" test.txt | Out-File -Append "output.txt"

test.txtの中身が
TEST = テスト

みたいなときに
output.txtを開くと
「test.txt:1:TEST = �e�X�g」のようになってしまいました。

対処

Select-StringとOut-FileにEncoding指定をする

両方指定しないとダメでした。
修正後はこのようになります。

Select-String -Encoding default "TEST" test.txt | Out-File -Encoding default -Append "output.txt"

-Encoding defaultとすることでShift-Jisを指定してくれます。

PowerShellが内部でUTF-16の文字コードを使用しているらしく、
なにもせずリダイレクトするとUTF-16でファイルが書き込まれてしまう。

メモ帳などではShift-Jisを使用しているため、ファイルを開くと
日本語が文字化けしてしまう。

というからくりらしいです。

内部で出力する文字コードと生成するファイルの文字コードを合わせないと
ダメってことなんだと思います。

これでダメな場合は片方だけエンコーディング指定する等試してみてください。
環境によるので、読者の方が私の実行環境と異なり、本記事の内容通りに動かない事が
考えられます。

さいごに

自分はこの方法で解決できました。

同じ悩みを抱える方は参考にして頂けたら嬉しいです。

この記事を面白いまたは役に立ったと思ってくれた方は是非私のTwitter(@kojimanotech)を
フォローしてくれたらうれしいです!

以上、コジマでした。


PowerShellカテゴリの最新記事