高見知英の技術ログ

技術関係のログをQiitaから移行してきました。プログラミングのほか、使っているアプリの細かい仕様についてなど書いていきます。

PowerShellの文字化け対策

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なのでわざわざ文字コードを変更する必要なんてないはず・・・ と思いきや、日本語環境の場合、PowerShellShift_JISになってしまうようです。なんてこった。

このため、明示的に文字コードを65001(UTF-8)に設定する必要があるとのことでした。

コンソール上の日本語が読めなくなった場合

なおこの操作をすると、コンソール上のにほんごがすべて豆腐になってしまい、よめなくなることがあります。

f:id:TakamiChie:20211130222839p:plain
豆腐 襲来

これはPowerShellUTF-8モードのフォントが欧文フォントなため、日本語が表示されないことによるものらしい。

PowerShellのタイトルバーを右クリックで表示される「プロパティ」より、日本語フォントを指定すると、ちゃんと日本語が表示されるようになります。

f:id:TakamiChie:20211130222955p:plain
PowerShellコンテキストメニュー

個人的にはBIZ UDゴシックあたりが読みやすくてお勧め。

それでも文字化けが発生する場合…

それでもps1ファイルを実行しようとした場合など、文字化けが発生する場合、ps1ファイルの文字コードを確認する必要があります。

PowerShellが解釈できるps1ファイルは、「UTF-8(BOMあり)」なようですので、ps1ファイルの文字コードがほかのものになってないか確認しましょう。

参考資料

*1:PowerShellの最新バージョンは7.xだろ!というツッコミもあるかもしれませんが、未だWindows 10のエクスプローラのリボンメニューからPowerShellを起動すると、5.xが起動するのです