Muni Bus

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

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

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

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

「0xef 0xbb 0xbf」から始まり、「3,」(0x33, 0x2c)の次の「あ」が0xe38182であることから、BOM付きのUTF-8であることがわかる。

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