あのとき始まったことのひとつ

ブログタイトルは大好きな小説である「あのとき始まったことのすべて」よりインスパイア

【PowerShell】ファイル出力時の文字コード、改行コードの指定

 

背景と目的

ファイル出力する際の「-Encoding default」が、明示的でなく、気持ち悪く感じた。

調べて個人的に落ち着いた内容を備忘録しておく。

 

動作確認環境

お家の環境で動作確認した。

PS C:\WINDOWS\system32> $PSVersionTable.PSVersion

Major Minor Build Revision
----- ----- ----- --------
5 1 19041 906

 

PowerShellにおけるファイル出力時の文字コード、改行コードの指定

  • UTF8(BOM有り) 、CRLF

$DATA -join "`r`n" |
Set-Content -Encoding UTF8 -LiteralPath (Join-Path $DIR_OUTPUT $FILE_OUTPUT_UTF8ariBOM_CRLF)

 

  • UTF8(BOM有り) 、LF

$DATA -join "`n" |
Set-Content -Encoding UTF8 -LiteralPath (Join-Path $DIR_OUTPUT $FILE_OUTPUT_UTF8ariBOM_LF)

 

  • UTF8(BOM無し) 、CRLF

$DATA -join "`r`n" |
ForEach-Object{ [Text.Encoding]::UTF8.GetBytes($_) } |
Set-Content -Encoding Byte -LiteralPath (Join-Path $DIR_OUTPUT $FILE_OUTPUT_UTF8nashiBOM_CRLF)

 

  • UTF8(BOM無し) 、LF

$DATA -join "`n" |
ForEach-Object{ [Text.Encoding]::UTF8.GetBytes($_) } |
Set-Content -Encoding Byte -LiteralPath (Join-Path $DIR_OUTPUT $FILE_OUTPUT_UTF8nashiBOM_LF)

 

$DATA -join "`r`n" |
ForEach-Object{ [Text.Encoding]::GetEncoding("Shift-JIS").GetBytes($_) } |
Set-Content -Encoding Byte -LiteralPath (Join-Path $DIR_OUTPUT $FILE_OUTPUT_SJIS_CRLF)

 

$DATA -join "`n" |
ForEach-Object{ [Text.Encoding]::GetEncoding("Shift-JIS").GetBytes($_) } |
Set-Content -Encoding Byte -LiteralPath (Join-Path $DIR_OUTPUT $FILE_OUTPUT_SJIS_LF)

 

補足

  • 「GetEncoding("Shift-JIS")」は「GetEncoding(932)」の方が確実かもだけど、そこまで求めていないので、可読性を優先。
  • 「Set-Content -Encoding UTF8」の場合、「-join "`r`n"」は不要かもだけど、あった方が、見易い&わかりやすいので、付与。

 

編集後記

 よく、ネット上で見かける皆さんのソース部分の記述、見易いけど、どうやるんじゃろ。初投稿で右も左もわからぬが、まぁ、とりあえず外で見ることができればいいので、良いか。ゆっくり、自分のペースで成長していきませう。微速前進0.5。

 ちなみに、一回、書いた記事が全部消えて、『Oh…』となった。「×閉じる」には気を付けませう…。