LoginSignup
11
19

More than 3 years have passed since last update.

Powershellで日本語が使いたい

Last updated at Posted at 2020-06-20

PowerShellで日本語が化ける

プログラマのぶち当たる壁の一つに「文字化け」があります。この記事を読んでいらっしゃる日本人の方は、よくわかっていただけると思います。
今回は、PowerShellで日本語を使いたい!という、私の希望を実現するために一番ネックとなった問題を共有いたします。

UTF-8が使いたい

とりあえず、現在の文字コードを確認してみよう

$OutputEncoding.encodingName
# -> US-ASCII

ググるとPowerShellでUTF-8を使用するには下記のコードを書けばいいらしい。

$OutputEncoding='utf-8'

↓結果↓

Cannot convert the "utf-8" value of type "System.String" to type "System.Text.Encoding".
At line:1 char:1
+ $OutputEncoding='utf-8'
+ ~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : MetadataError: (:) [], ArgumentTransformationMetadataException
    + FullyQualifiedErrorId : RuntimeException

怒られた。。。解せぬ。。。

もっと調べた

どうやら、こんな書き方もあるらしい。

$OutputEncoding = [Text.UTF8Encoding]::UTF8

で、文字コードを確認してみる↓

$OutputEncoding.encodingName
  # -> Unicode (UTF-8)

おおっ!うまくいったぞ

日本語ファイルを読み込んで見る

適当に、フォルダ内のファイルを取り込んで、名前を出力してみる

$DIR_ = Get-ChildItem 
$FILES = ${DIR_}.name

foreach ($f in $FILES) {
  Write-Host $f
}

だめです!!できません!!(出力例を示したかったのですが、pcを再起動するのが面倒なので、割愛します)

また調べた

こんなページを発見↓
Windows10 April 2018 Updateで追加されたUTF-8モードを使う
ほうほう。
コントロールパネル -> 時計と地域 -> 地域 -> 管理 -> Unicode対応でないプログラムの言語
を、どうやら変更するらしい。

やってみた

コントロールパネルから時計と地域を選択
controllPanel.png
地域を選択
時計と地域.png
新しく出現したウィンドの管理タブを選択
地域.png
管理タブのシステムロケールの変更を選択
管理.png
新規ウィンドウのチェックボックスをチェック(現在のシステムロケールは各環境依存なので、気にしない)
変更.png
以上

再チャレンジ

もう一度フォルダ内のファイル名を列挙数するプログラムを実行

$DIR_ = Get-ChildItem 
$FILES = ${DIR_}.name

foreach ($f in $FILES) {
  Write-Host $f
}

↓結果↓

はげ # フォルダ
ひげ # フォルダ
ふげ # フォルダ
へげ # フォルダ
ほげ # フォルダ
hoge.txt # テキストファイル

成功!!

まとめ

文字コード嫌いになりそうなので、なるたけイングリッシュ使おうと思いました。
でも、個人ファイルならまだしも、業務とかだと日本語ファイル絶対あるしなー。。。

そもそも、$OutputEncoding='utf-8'みたいな宣言って、字面的に出力設定っぽいから意味ないのかな?

11
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
19