2018年3月20日火曜日

PowerShellのRedirectのエンコードがUTF16固定で嵌った

この文書の作成時点の環境は以下です。

  • PowerShell 5.1.15063.909

標記のおとり。
以下のようにリダイレクトでファイル出力すると、BOM付きUTF16リトルエンディアンでエンコードされる。

PowerShell
PS> echo はろー > hello.txt 

ざっと探した感じではリダイレクトのエンコードを指定する方法は見つからない。

代わりにOut-Fileコマンドレットが利用できる。
Out-* コマンドレットを使用してデータをリダイレクトする | Microsoft Docs

PowerShell
PS> echo はろー  | Out-File -FilePath .\hello.txt -Encoding UTF-8

BOMなしは自前でがんばる必要がある。まじかよ。
いくつか方法がありそうだが、例えばText.Encoding.UTF8.GetBytes()でUTF8のByte列を取得し、Set-Contentコマンドレットで出力する方法は以下。

PowerShell
PS> echo はろー |  %{[Text.Encoding]::UTF8.GetBytes($_)} | Set-Content -Path .\hello.txt -Encoding Byte

PowerShellがちょっと嫌いになった。エンコードの違いに気付かなかった自分が悪いんだけどね。

0 コメント:

コメントを投稿