#author("2020-05-09T06:25:51+09:00","default:ryuichi","ryuichi")
#author("2020-05-09T07:56:26+09:00","default:ryuichi","ryuichi")
* 日本語ファイルの入出力 [#tc09afe3]
** 前提 [#oad576c6]
- PowerShellの内部エンコーディングはUTF16。
- PowerShellが自動判別して読み込めるエンコーディングは、UTF16、SJIS、UTF8(BOMあり)。
-- 入力元のテキストファイルがどうであれ、読み込み時にUTF16へ変換される。
- PowerShellがファイルを出力する際の既定のエンコーディングはUTF16。
-- すなわち、ファイル書き出しコマンドレットや">" によるリダイレクトでのファイル出力時。
- 日本語WindowsのPowerShellターミナルソフト(コマンドプロンプト)の既定のエンコーディングはSJIS。
- 日本語WindowsのPowerShellコンソールソフト(コマンドプロンプト)の既定のエンコーディングはSJIS。
- いったんPowerShellが正しくテキストを認識すればコンソール上での表示は自動的にSJISへ変換されるので気にする必要はない。
** UTF8のテキストファイルを出力 [#eb8cbb10]
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のテキストファイルを入力 [#obf1d5ab]
PS> Get-Content utf8-bom.txt
あいうえお
- BOMありUTF8、UTF16、SJISは自動判定される
*** BOMなしのUTF8のファイルを入力 [#kc7a3e5f]
PS> Get-Content utf8-nobom.txt -Encoding UTF8
あいうえお
- BOMなしのUTF8は-Encoding UTF8でエンコーディングを明示する
*** 参考 [#ha81afa9]
https://stackoverflow.com/questions/40098771/changing-powershells-default-output-encoding-to-utf-8