PowerShell 7でバッチ処理が文字化けする
目次
はじめに
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))