今までPowerShellはPowerShell ISEを使って書いていたのですが、以下の記事を読んで、Visual Studio Codeで書いてみました。
VS Code での PowerShell サポートが強化されました - tech.guitarrapc.cóm
"Hello world!" "ハローワールド!"
というexample.ps1
スクリプトを作成し、実行してみたところ、
Hello world! 繝上Ο繝シ繝ッ繝シ繝ォ繝・
と、日本語部分が文字化けしたため、対応をメモしておきます。
環境
- Windows10 x64
- PowerShell 5.0
- Visual Studio Code 1.2.1 (以下VS Code)
原因と対応
VS Codeでファイルを新規作成するときのデフォルトの文字コードが UTF-8 (BOMなし)
のためです。
試しに、日本語が含まれるps1ファイルの文字コードを
などにして実行した場合、
Hello world! ハローワールド!
と正しく表示されました。
どの文字コードで保存しておくのが良いのか調べてみたところ、
- Powershellスクリプト(.ps1、.psm)の文字コードに関して
- PowerShell 自己署名証明書を追加するとUnknownErrorが表示される~Set-AuthenticodeSignature - 元「なんでもエンジニ屋」のダメ日記
より、UTF-8 with BOM
が良さそうでした。
VS Codeでファイルの文字コードをGUIで変更する場合は以下の通りです。
特集:Visual Studio Code早分かりガイド:Visual Studio Codeの使い方、基本の「キ」 (3/5) - @IT
今回はコマンドパレットを使ってみます。
Ctrl + Shift + P
でコマンドパレットを開くchf
と入力しChange File Encoding
のみに絞られたところで、Enters
と入力し、Save with Encoding
のみに絞られたところで、EnterUTF-8 with BOM
を選択
再度実行すると、
Hello world! ハローワールド!
となりました。
PowerShell ISEで作成したps1ファイルの文字コードについて
手元のPowerShell ISEでps1ファイルを作成して文字コードを確認するとUTF-8 with BOM
でした。
一方、公式資料で確認すると、
By default, Windows PowerShell ISE saves new script files (.ps1), script data files (.psd1), and script module files (.psm1) as Unicode (BigEndianUnicode) by default.
UTF-16 BE
と書かれていました。
この違いはどこから来るのかを調べてみましたが、公式資料は見当たらないものの、v3.0から変更になったようでした。
- Powershellスクリプト(.ps1、.psm)の文字コードに関して (再掲)
- powershell - How to change the ps1 file in Unicode BigEndian to ASCII? - Stack Overflow
文字コードまわりの資料
PowerShell
- 各種処理の入出力文字コード設定方法 - Lazy Diary @ はてな
- [PowerShell] 文字コードの取り扱いについて | インフラSEの運用・構築メモ
- encoding - Using PowerShell to write a file in UTF-8 without the BOM - Stack Overflow