Muni Bus

パソコンの操作方法や設定方法を忘れないようにメモしています。ブログを一回引っ越ししているので、所々表示がかなり乱れています・・・

【PowerShell】BOM無しUTF-8のテキストファイルを簡単に出力する

文字列配列の場合は、FileクラスのWriteAllLinesメソッドを使う。以下は変数$linesに代入したテキストを、ファイルtemp_utf8nb.csvに出力した例。文字コードUTF-8(BOM無し)、改行コードはCR+LF。

PS > $lines = "1,ABC", "2,abc", "3,あいう"
PS > $file = (gl).Path + "\temp_utf8nb.csv"
PS > [IO.File]::WriteAllLines($file, $lines)
PS > Get-Content .\temp_utf8nb.csv -Encoding utf8
1,ABC
2,abc
3,あいう
PS > Format-Hex .\temp_utf8nb.csv
           パス: ○○○\temp_utf8nb.csv
           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000   31 2C 41 42 43 0D 0A 32 2C 61 62 63 0D 0A 33 2C  1,ABC..2,abc..3,
00000010   E3 81 82 E3 81 84 E3 81 86 0D 0A                 ããã..

「1」から始まり、「3,」(0x33, 0x2c)の次の「あ」が0xe38182であることから、BOM無しのUTF-8であることがわかる。 任意文字列であれば、WriteAllTextメソッドを使う。

PS > $s = "1,ABC`r`n2,abc`r`n3,あいう`r`n"
PS > $file = (gl).Path + "\temp_utf8nb.csv"
PS > [IO.File]::WriteAllText($file, $s)
PS > Get-Content .\temp_utf8nb.csv -Encoding utf8
1,ABC
2,abc
3,あいう
PS > Format-Hex .\temp_utf8nb.csv
           パス: ○○○\temp_utf8nb.csv
           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000   31 2C 41 42 43 0D 0A 32 2C 61 62 63 0D 0A 33 2C  1,ABC..2,abc..3,
00000010   E3 81 82 E3 81 84 E3 81 86 0D 0A                 ããã..

.NETのクラスを使う場合、カレントディレクトリはそのPowerShellが起動しているディレクトリになってしまうため、Get-Locationコマンドレット(エイリアス:gl)を使って、コマンドラインのカレントディレクトリにファイルを出力するようにしている。