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

VS CodeでPowerShellファイルを作成・実行したら文字化けした

PowerShell

今までPowerShellPowerShell ISEを使って書いていたのですが、以下の記事を読んで、Visual Studio Codeで書いてみました。
VS Code での PowerShell サポートが強化されました - tech.guitarrapc.cóm

 
Hello world的な

"Hello world!"
"ハローワールド!"

というexample.ps1スクリプトを作成し、実行してみたところ、

Hello world!
繝上Ο繝シ繝ッ繝シ繝ォ繝・

と、日本語部分が文字化けしたため、対応をメモしておきます。

 

環境

 

原因と対応

VS Codeでファイルを新規作成するときのデフォルトの文字コードUTF-8 (BOMなし)のためです。

 
試しに、日本語が含まれるps1ファイルの文字コード

などにして実行した場合、

Hello world!
ハローワールド!

と正しく表示されました。

 
どの文字コードで保存しておくのが良いのか調べてみたところ、

より、UTF-8 with BOMが良さそうでした。

 
VS Codeでファイルの文字コードGUIで変更する場合は以下の通りです。
特集:Visual Studio Code早分かりガイド:Visual Studio Codeの使い方、基本の「キ」 (3/5) - @IT

今回はコマンドパレットを使ってみます。

  • Ctrl + Shift + Pでコマンドパレットを開く
  • chfと入力しChange File Encodingのみに絞られたところで、Enter
  • sと入力し、Save with Encodingのみに絞られたところで、Enter
  • UTF-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.

How to Write and Run Scripts in the Windows PowerShell ISE

UTF-16 BEと書かれていました。

 
この違いはどこから来るのかを調べてみましたが、公式資料は見当たらないものの、v3.0から変更になったようでした。

 

文字コードまわりの資料

PowerShell

 

一般