【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)
-
SJIS、CRLF
$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)
-
SJIS、LF
$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…』となった。「×閉じる」には気を付けませう…。