読者です 読者をやめる 読者になる 読者になる

tech.guitarrapc.cóm

C#, PowerShell, Unity, Cloud, Serverless Technical Update and Features

PowerShell で non-Unicode Programs の言語を変更する

多忙って良くないですね。記事が滞ってますが、ネタだけは日々増えています。

簡単ですが、結構欲しがる人がいそうなので表題の記事を。

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) という項目があります。

f:id:guitarrapc_tech:20140515063837p:plain

f:id:guitarrapc_tech:20140515063848p:plain

ここが、日本語(日本) あるいは Japanese (Japan) になっていないと、PowerShell や cmd で日本語が化けて正常に動作しません。

管理者権限があるユーザーで当該項目を開いて、日本語に設定すると Windowsの再起動を求められるので再起動すると切り替わります。

PowerShellで自動化する

PowerShell でやるのは、自動化したり、どこに設定があったっけ?って探さないためです。自動化がいらなくて、マウスで100台のマシンや複数台に毎度やることが耐えれる人はいらないでしょう。

私はそういう作業はプログラムに任せて、人間のやることじゃないと思っているのでPowerShell を使います。

手順は簡単です。この2行でおしまいです。

Set-WinSystemLocale ja-JP
Restart-Computer

Step1. PowerShell を 管理者として実行

f:id:guitarrapc_tech:20140515064640p:plain

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

以上です。簡単ですね。

まとめ

自動化しないで何をするの。