こんにちは。不可思議絵の具です。
- 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種の文字コードを自動認識する
- Shift-JIS
- UTF-8(BOM有り)
- UTF-16 LE
- UTF-16 BE
要因
一方、【VSCode】のファイル保存のデフォルトは
- 「UTF-8(BOM無し)」
そのため、PowerShellで正しく解釈できず、文字化けが発生する
対策
対処法としては
- スクリプトを「UTF-8(BOM有り)」で保存し直す
(スクリプト側をPowerShellに合わせる) - VSCodeのデフォルト文字コードを「UTF-8(BOM有り)」に変更
(スクリプト側をPowerShellに合わせる) - PowerShell側のデフォルト文字コードを「UTF-8(BOM有り)」に変更
(PowerShell側をスクリプトに合わせる)
の3パターンがありますが、デフォルト値を変更する②、③は好ましくないと判断。
①で対応しました。
(②、③も一応紹介します)
また、①、②においては文字コードを「Shift-JIS」にしても良いと思いますが、様々な環境で文字コードがUTFに統一されつつある昨今では、積極的に選ぶ必要はないのかな、と思います。
①スクリプトを「UTF-8(BOM有り)」で保存し直す
私の場合、たかだか数ファイルだったので、VSCodeで文字コードを「UTF-8(BOM有り)」に変更して保存し直しました。
(ファイルが大量な場合は【nkf】などの変換ツールで一括変換すれば良いでしょう)
手順は下記の通りです。
- 画面右下の「UTF-8」をクリック
(全体)
(拡大) - 『アクションの選択』で「Save with Encoding(エンコード付きで保存)」を選択
- 続いて「UTF-8 with BOM」を選択
- 画面右下の文字コードインジケーターが「UTF-8 with BOM」になったことを確認
②(参考)VSCodeのデフォルト文字コードを変更
VSCodeのデフォルト文字コードを「UTF-8(BOM有り)」や「Shift-JIS」に変更する方法です。
デフォルト値を変えるのはオススメしません。
詳細はこちら(タップで表示)
③(参考)PowerShellのデフォルト文字コードを変更
PowerShellの文字コードを「UTF-8(BOM有り)」に変更する方法です。
デフォルト値を変えるのはオススメしません。
詳細はこちら(タップで表示)
さいごに
下記記事を参考にさせていただきました。
vscodeのターミナルが文字化けする
windows 10 pro vscode バージョン 1.25.1 vscodeのターミナルで日本語が文字化けします。ユーザー設定で “files.autoGuessEncoding”: true としたのですが直りません。ど…
👆C++での例だが、歴史的な変遷にも触れていて示唆に富んでいる
VS CodeでPowerShellファイルを作成・実行したら文字化けした – メモ的な思考的な
今までPowerShellはPowerShell ISEを使って書いていたのですが、以下の記事を読んで、Visual Studio Codeで書いてみました。 VS Code での PowerShell サポートが強化され…
👆なぜ、「『UTF-8(BOM有り)』が無難なのか」がまとめられている
以上です。では(^O^)/