状況
PowerShell利用時に日本語が文字化けする。
例えばpingコマンド
PS C:\Users\test> ping 10.X.Y.Z Pinging 10.X.Y.Z with 32 bytes of data: Reply from 10.X.Y.Z: bytes=32 time=2ms TTL=128 Reply from 10.X.Y.Z: bytes=32 time=1ms TTL=128 10.X.Y.Z □ ping □□: □□□□: □□ = 2、□□ = 2、□□ = 0 (0% □□□)□ □□□□□□□□□□□ (□□□): □□ = 1ms、□□ = 2ms、□□ = 1ms
環境情報
- Windows Server 2019
原因
PowerShellで設定されている文字コードがShift-JISになっていない。
以下で文字コードを確認できます。
PS C:\Users\test> chcp Active code page: 437
ちなみにshift_jisは932。437は特定のパーソナルコンピュータ用文字セットです。
解決策
chcp
コマンドで変更する。
PS C:\Users\test> chcp 932 Active code page: 932
以下、補足です。
補足
そもそもWindowsでは Settings > Time&Language でTime ZoneやLanguageを変更できますが、その操作によってコマンドプロンプトやPowerShell利用時に文字化けするケースがあります。
その際の暫定対応としてchcp
コマンドが使えます。ちなみにコードは数字で管理され、例えばutf-8は65001、shift-jisは932です。
ほかのコードはMicrosoftが管理するウェブドキュメントの「 Unicode and Character Set Constants」カテゴリに「Code Page Identifiers」として扱われています。
chcpはchangecodepageなんですね。
修正後、同じpingコマンドを押下すると以下のように日本語が表示されました。
PS C:\Users\test> ping 10.X.Y.Z Pinging 10.X.Y.Z with 32 bytes of data: Reply from 10.X.Y.Z: bytes=32 time=2ms TTL=128 Reply from 10.X.Y.Z: bytes=32 time=1ms TTL=128 10.X.Y.Z の ping 統計: パケット数: 送信 = 2、受信 = 2、損失 = 0 (0% の損失)、 ラウンド トリップの概算時間 (ミリ秒): 最小 = 1ms、最大 = 2ms、平均 = 1ms
UNIX系OSであればnkfコマンドで標準出力の結果の文字化けを解消したりしますが
Windowsであればchcp
が使えることは覚えておきたいです。
以上、ご参考になれば幸いです。