日本語ファイルの入出力
前提
- PowerShellの内部エンコーディングはUTF16。
- PowerShellが自動判別して読み込めるエンコーディングは、UTF16、SJIS、UTF8(BOMあり)。
- 入力元のテキストファイルがどうであれ、読み込み時にUTF16へ変換される。
- PowerShellがファイルを出力する際の既定のエンコーディングはUTF16。
- すなわち、ファイル書き出しコマンドレットや">" によるリダイレクトでのファイル出力時。
- 日本語WindowsのPowerShellコンソールソフト(コマンドプロンプト)の既定のエンコーディングはSJIS。
- いったんPowerShellが正しくテキストを認識すればコンソール上での表示は自動的にSJISへ変換されるので気にする必要はない。
UTF8のテキストファイルを出力
PS> $PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
PS> echo "あいうえお" > utf8-bom.txt
または
PS> echo "あいうえお" | Out-File -Encoding utf8 utf8-bom.txt
- ">"を使ったリダイレクトはPowerShell バージョン5.1以降で有効
- 出力されるUTF8はBOM付きなので、一般的なUNIX系のコマンドはBOMを処理できないことが多い
UTF8のテキストファイルを入力
PS> Get-Content utf8-bom.txt
あいうえお
- BOMありUTF8、UTF16、SJISは自動判定される
BOMなしのUTF8のファイルを入力
PS> Get-Content utf8-nobom.txt -Encoding UTF8
あいうえお
- BOMなしのUTF8は-Encoding UTF8でエンコーディングを明示する
参考
https://stackoverflow.com/questions/40098771/changing-powershells-default-output-encoding-to-utf-8