PowerShellのバージョンを5.1.19041.1320にあげてから、急に既存のスクリプトが文字化けを起こすようになってしまいました*1。
とりあえず「PowerShell 文字化け」などで検索すると「-NoExit -Command "chcp 65001"
という文言をPowerShellの起動ショートカットに加えると良い」という結果が出てきますが、これだとすべてのPowerShell起動シチュエーション(コンテキストメニューにある「PowerShellで実行」など)にこのコマンドを追加してあげなければならず、面倒です。
Microsoft.PowerShell_profile.ps1
を編集する
そんなときのために、PowerShellには常にコンソール起動時に必ず実行されるスクリプトとして、Microsoft.PowerShell_profile.ps1
というファイルがありますので、これを使います。
%USERPROFILE%\Documents\WindowsPowerShell\
というフォルダ(なければ作成)に、Microsoft.PowerShell_profile.ps1
というファイルを作って、以下の行を付け加えます。
chcp 65001
これで、PowerShellを起動したときに必ずこのコマンドが実行されるようになりますので、各種ショートカットの編集などは不要になります。
なぜchcp 65001
?
chcpコマンドは、コンソールの文字コードを変更するためのコマンドです。
最近のWindowsであれば基本文字コードはUnicodeなのでわざわざ文字コードを変更する必要なんてないはず・・・ と思いきや、日本語環境の場合、PowerShellはShift_JISになってしまうようです。なんてこった。
このため、明示的に文字コードを65001(UTF-8)に設定する必要があるとのことでした。
コンソール上の日本語が読めなくなった場合
なおこの操作をすると、コンソール上のにほんごがすべて豆腐になってしまい、よめなくなることがあります。
これはPowerShellのUTF-8モードのフォントが欧文フォントなため、日本語が表示されないことによるものらしい。
PowerShellのタイトルバーを右クリックで表示される「プロパティ」より、日本語フォントを指定すると、ちゃんと日本語が表示されるようになります。
個人的にはBIZ UDゴシックあたりが読みやすくてお勧め。
それでも文字化けが発生する場合…
それでもps1ファイルを実行しようとした場合など、文字化けが発生する場合、ps1ファイルの文字コードを確認する必要があります。
PowerShellが解釈できるps1ファイルは、「UTF-8(BOMあり)」なようですので、ps1ファイルの文字コードがほかのものになってないか確認しましょう。
参考資料
*1:PowerShellの最新バージョンは7.xだろ!というツッコミもあるかもしれませんが、未だWindows 10のエクスプローラのリボンメニューからPowerShellを起動すると、5.xが起動するのです