(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Windows】PowerShellやcmdで日本語が文字化けする際の対応

スポンサーリンク

状況

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が使えることは覚えておきたいです。

以上、ご参考になれば幸いです。