多忙って良くないですね。記事が滞ってますが、ネタだけは日々増えています。
簡単ですが、結構欲しがる人がいそうなので表題の記事を。
Windows は、シェル (cmd や PowerShell)、あるいは Unicode でないプログラムで使用する言語を設定しないと、文字化けを起こすことがあります。
これは、Language Pack の状態や、Windows UIの言語は別箇の位置づけなので、
English Windowsの言語を日本語にLanguage Pack を当てたけど、PowerShell で日本語が化ける!
ということも起こります。この対応を紹介しましょう。
目次
SystemLocale
Windows の non-Unicode 時の言語設定は System Locale と呼ばれる設定になります。
System Locale が日本語なら non-Unicode プログラムで 日本語が使え、 en-US なら 日本語は正常に認識されません。
旧来の設定方法 (GUI)
PowerShell でサポートされるまで、マウスでポチポチが多かったと思います。
この場合は、コントロールパネルで設定が可能です。
コントロールパネル > 地域 > 管理タブ
Control Panel > Region > Administrator
と進むと、Unicode対応でないプログラムの言語対応 (Language for non-Unicode programs) という項目があります。
ここが、日本語(日本) あるいは Japanese (Japan) になっていないと、PowerShell や cmd で日本語が化けて正常に動作しません。
管理者権限があるユーザーで当該項目を開いて、日本語に設定すると Windowsの再起動を求められるので再起動すると切り替わります。
PowerShellで自動化する
PowerShell でやるのは、自動化したり、どこに設定があったっけ?って探さないためです。自動化がいらなくて、マウスで100台のマシンや複数台に毎度やることが耐えれる人はいらないでしょう。
私はそういう作業はプログラムに任せて、人間のやることじゃないと思っているのでPowerShell を使います。
手順は簡単です。この2行でおしまいです。
Set-WinSystemLocale ja-JP Restart-Computer
Step1. PowerShell を 管理者として実行
Step2. Get-WinSystemLocale
コマンドで現在のシステムロケールを確認
Get-WinSystemLocale
結果がja-JP でなければ、日本語ではないということです。
LCID Name DisplayName ---- ---- ----------- 1041 ja-JP Japanese (Japan)
Step3. Set-WinSystemLocale
でシステムロケールを日本語にする
Set-WinSystemLocale ja-JP
実行しても何も出ないのがアレです。
C:\Windows\system32> Set-WinSystemLocale ja-JP C:\Windows\system32>
Step4. 再起動して適用。
再起動しないと適用されません。自分の手元のPCならこれでいいでしょう。
Restart-Computer
もし、自動化する場合は、他のプログラムに再起動が阻害されないように-Forceにします。
Restart-Computer -Force
以上です。簡単ですね。
まとめ
自動化しないで何をするの。