#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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS