Visual Studio CodeでPowerShellスクリプトが文字化けする時の対処法

こんにちは。不可思議絵の具です。

  • Visual Studio Code(以降VSCode)で、漢字入りのPowerShellスクリプトを実行すると文字化けが原因で実行時エラー発生
  • スクリプトの文字コードを「UTF-8 with BOM」に切り替えて解決した

という記録です。

もくじ(押すと各章に飛ぶ)

現象

  • VSCodeで
  • 漢字を含むPowerShellスクリプトを実行すると、
  • 文字化けが原因の文法エラーが発生する

PowerShellスクリプト内の漢字が入った場所👇が原因で、

こういうエラー👇が発生する

環境

記事の内容は下記環境を前提にしています。

OS

Windows 10 Pro Ver. 20H2

VSCode

1.52.1

PowerShell

7.1.1

原因

【PowerShell】と【VSCode】でデフォルト文字コードが違うため。

要因
【PowerShell】は下記4種の文字コードを自動認識する
  1. Shift-JIS
  2. UTF-8(BOM有り
  3. UTF-16 LE
  4. UTF-16 BE
要因
一方、【VSCode】のファイル保存のデフォルトは
  1. 「UTF-8(BOM無し)」

そのため、PowerShellで正しく解釈できず、文字化けが発生する

対策

対処法としては

  1. スクリプトを「UTF-8(BOM有り)」で保存し直す
    (スクリプト側をPowerShellに合わせる)
  2. VSCodeのデフォルト文字コードを「UTF-8(BOM有り)」に変更
    (スクリプト側をPowerShellに合わせる)
  3. PowerShell側のデフォルト文字コードを「UTF-8(BOM有り)」に変更
    (PowerShell側をスクリプトに合わせる)

の3パターンがありますが、デフォルト値を変更する②、③は好ましくないと判断。

①で対応しました。
(②、③も一応紹介します)

また、①、②においては文字コードを「Shift-JIS」にしても良いと思いますが、様々な環境で文字コードがUTFに統一されつつある昨今では、積極的に選ぶ必要はないのかな、と思います。

①スクリプトを「UTF-8(BOM有り)」で保存し直す

私の場合、たかだか数ファイルだったので、VSCodeで文字コードを「UTF-8(BOM有り)」に変更して保存し直しました。
(ファイルが大量な場合は【nkf】などの変換ツールで一括変換すれば良いでしょう)

手順は下記の通りです。

  1. 画面右下の「UTF-8」をクリック
    (全体)
    画面右下の「UTF-8」をクリック
    (拡大)
    画面右下の「UTF-8」をクリック(拡大図)
  2. 『アクションの選択』で「Save with Encoding(エンコード付きで保存)」を選択
    『アクションの選択』で「Save with Encoding(エンコード付きで保存)」を選択
  3. 続いて「UTF-8 with BOM」を選択
    「UTF-8 with BOM」を選択
  4. 画面右下の文字コードインジケーターが「UTF-8 with BOM」になったことを確認
    画面右下の文字コードインジケーターが「UTF-8 with BOM」になったことを確認

②(参考)VSCodeのデフォルト文字コードを変更

VSCodeのデフォルト文字コードを「UTF-8(BOM有り)」や「Shift-JIS」に変更する方法です。

デフォルト値を変えるのはオススメしません。

③(参考)PowerShellのデフォルト文字コードを変更

PowerShellの文字コードを「UTF-8(BOM有り)」に変更する方法です。

デフォルト値を変えるのはオススメしません。

さいごに

下記記事を参考にさせていただきました。

👆C++での例だが、歴史的な変遷にも触れていて示唆に富んでいる

👆なぜ、「『UTF-8(BOM有り)』が無難なのか」がまとめられている

以上です。では(^O^)/

お役に立てたらシェアお願いします(^O^)/
  • URLをコピーしました!
もくじ(押すと各章に飛ぶ)