プログラム

PowerShellのImport-CsvコマンドオプションのEncodingが静かに変更されていた

PowerShell 7のImport-Csvを使用した際に読み込んだデータが文字化けしており、困って調べた際のメモです

読み込んだCSVデータが文字化け

PowerShell 7でもいつものように以下のコマンドを使用してCSVファイルを読み込みそのデータを使おうと思ったら、なぜかうまく動かずデバッグでデータを見ると文字化けしていました

Import-Csv -LiteralPath $targetFile -Encoding Default
読み込んだデータが文字化けしている

原因および対応方法

原因

今回の件を調べてみると、なんとPowerShell 6から今回の事象は起きていたようです
以下のサイトにもあるように【Default】の扱いがshift_jisからUTF8になっていることが原因でした

対応方法

サイトにも記載されていますが、以下のようにするとshift_jisが読み込めました

# 932はshift_jisを示す値
Import-Csv -LiteralPath $targetFile -Encoding ([System.Text.Encoding]::GetEncoding(932))
参考サイト
PowerShell 6で、Shift_JISのCSVをImport-Csvで読み込んだら文字化けした
PowerShell 6で、Shift_JISのCSVをImport-Csvで読み込んだら文字化けした

Follow @venividivici830 PowerShell 4で作ったShift_JIS(シフトJIS) ...

続きを読む

この方法はImport-Csv以外にもPowerShell 6以降ではGet-Content、Out-File、Export-Csvでも同様にする必要があるようなので注意

上記で出てきた文字コードのIDは以下のサイトが参考にしてください

MSサイト
Encoding クラス (System.Text) | Microsoft Learn
Encoding クラス (System.Text) | Microsoft Learn

文字エンコーディングを表します。

続きを読む

-プログラム
-