【Windows】Powershell の import-csv コマンドレットで文字化けする場合の対処

import-csvでファイルを読み込むと文字化けする


Windows の Powershell5.1 環境においてimport-csv コマンドレットでCSVファイルを読み込みました。
その読み込んだ文字列を加工して出力しているのですが、なぜか文字化けしてしまいました。
どのような理由で文字化けするのしょうか。
読み込むファイルの文字コードは統一しなくてはならないのでしょうか。

読み込む文字コードがShift-JISなら文字化けする


import-csvでファイルを読み込む場合ファイルは UTF-8想定で読み込まれます。
よってもし読み込むCSVファイルの文字コードが Shift-JISの場合、文字化けすることになります。

例えば以下のようなファイルの作成方式では import-csv で文字化けすることとなります。
(1)Windows 標準のメモ帳でファイルタイプを""として指定した場合
(2)Excel でファイル形式をCSV で保存した場合(2021年11月現在に確認)
(3)秀丸でファイル形式をShift-JISにした場合。

インポートするファイル形式を指定する


この場合は読み込むときにファイル形式を指定する必要があります。


Import-Csv -Encoding Default



エンコーディングでファイル形式を Default にした場合、ファイル形式がShift-JIS として読み込まれるようです。
Powershell 5.1でも何も指定しない場合は UTF-8 想定として読み込まれるのため、最新のPowershell 6 系でもUTF-8 なのかもしれません。


構文
Import-Csv [[-Path] <String[]>] [[-Delimiter] <Char>] [-Encoding {Unicode | UTF7 | UTF8 | ASCII | UTF32 | BigEndian
Unicode | Default | OEM}] [-Header <String[]>] [-LiteralPath <String[]>] [<CommonParameters>]

Import-Csv [[-Path] <String[]>] [-Encoding {Unicode | UTF7 | UTF8 | ASCII | UTF32 | BigEndianUnicode | Default | OE
M}] [-Header <String[]>] [-LiteralPath <String[]>] -UseCulture [<CommonParameters>]




以上のように読み込む文字コードには"Unicode | UTF7 | UTF8 | ASCII | UTF32 | BigEndianUnicode | Default | OEM "を指定することが可能です。



Windowsのよくある質問 FAQ




個人的に独自に調査した事項をまとめています。各ベンダーとは全く関係がありません。
内容に誤りがある場合や情報が古くなっている場合があります。その場合でも修正されるとは限りません。
参考としてサイト閲覧ください。万が一誤りがあり損失等が発生しても保証しません。あくまでも自己責任でサイトを閲覧ください。