確定申告のCSV取り込みで月別のcsvを連結しようと思ったら文字化けしたので解決したときのメモ
状況とやりたかったこと:
フォルダの中に 202101.csv, 202102.csv ... 202112.csv のように1年分のcsvファイルが入っている状態
これらのcsvを連結して一つのファイルにしたい。
試したこと:
いろいろ調べると、やはり文字コードの問題があるようでPowerShellのデフォルトの文字コードがUTF-8になっていることが原因らしい。 PowerShellの文字コード設定を変えればいけるとかの記事を参考にしたのだが、うまくいかず。それならバイナリで出力して、バイナリで受け取ってくれればと
Get-Content *.csv -Encoding Byte | Set-Content all.csv -Encoding Byte
のようにしてみたら以下のようなエラーが、
Get-Content: Cannot process argument transformation on parameter 'Encoding'. 'Byte' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method. (Parameter 'name')
Byte という名前は Encoding パラメータに対して有効ではありませんよということのようです。
結果:
じゃあフツーに SJISで設定したらと試すとうまくいきました。
Get-Content *.csv -Encoding Shift-JIS | Set-Content all.csv -Encoding Shift-JIS
銀行とか、クレジットカード会社が提供している明細CSVダウンロードのサービスではすぐにExcelで開けるようにShift-JIS のEncoding でダウンロードされるようです。
つまりフツーにExcel使っている場合はcsvファイルから直接Excelを開くようにする場合は、CSVファイルはShift-JISである必要がある。少なくとも2022年2月時点では