PowerShell 7でバッチ処理が文字化けする

toc目次

はじめに

Windows PowerShell 5.1からPowerShell 7に変更したところ、CSVを取り込むバッチ処理で文字化けが発生。

文字化けの原因

原因は、PowerShell 5.1ではデフォルトエンコードがShift_JISでしたが、PowerShell 7のデフォルトエンコードがUTF-8に変更されたため。

調べてみると、PowerShell 6あたりからデフォルトのエンコードがShift_JISからUTF-8に変更されたようです。

> [Text.Encoding]::Default

BodyName          : iso-2022-jp
EncodingName      : 日本語 (シフト JIS)
HeaderName        : iso-2022-jp
WebName           : shift_jis
WindowsCodePage   : 932
IsBrowserDisplay  : True
IsBrowserSave     : True
IsMailNewsDisplay : True
IsMailNewsSave    : True
IsSingleByte      : False
EncoderFallback   : System.Text.InternalEncoderBestFitFallback
DecoderFallback   : System.Text.InternalDecoderBestFitFallback
IsReadOnly        : True
CodePage          : 932
> [Text.Encoding]::Default

Preamble          :
BodyName          : utf-8
EncodingName      : Unicode (UTF-8)
HeaderName        : utf-8
WebName           : utf-8
WindowsCodePage   : 1200
IsBrowserDisplay  : True
IsBrowserSave     : True
IsMailNewsDisplay : True
IsMailNewsSave    : True
IsSingleByte      : False
EncoderFallback   : System.Text.EncoderReplacementFallback
DecoderFallback   : System.Text.DecoderReplacementFallback
IsReadOnly        : True
CodePage          : 65001

対応方法

-Encoding default」を「-Encoding ([Text.Encoding]::GetEncoding(932))」と変更することで文字化けは解消しました。

# 変更前
Import-Csv xxx.csv -Encoding default

# 変更後
Import-Csv xxx.csv -Encoding ([Text.Encoding]::GetEncoding(932))