はじめに
コジマです。
※この記事は備忘録的な感じです。
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)を
フォローしてくれたらうれしいです!
以上、コジマでした。