Muni Bus

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

【PowerShell】StreamWriterクラスを使ったファイルへの書き込み

New-Objectコマンドレットを使ってSystem.IO名前空間StreamWriterクラスのオブジェクトを作成する。第一引数には書き込むファイルのファイル名を指定する。指定したファイルの有無にかかわらずファイルに一から書き込む場合は第二引数に$falseを指定する。第三引数には出力する文字コードを指定する。

PS > $ofile = (gl).Path + "\text.txt"
PS > $enc = [System.Text.Encoding]::GetEncoding("shift_jis")
PS > $sw = New-Object System.IO.StreamWriter($ofile, $false, $enc)
PS > $sw.WriteLine("石見舞菜香かわいい")
PS > $sw.WriteLine("和多田美咲かわいい")
PS > $sw.Close()
PS > Get-Content .\text.txt
石見舞菜香かわいい
和多田美咲かわいい
PS > Format-Hex .\text.txt
           パス: ○○○\text.txt
           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000   90 CE 8C A9 95 91 8D D8 8D 81 82 A9 82 ED 82 A2  Ωةí¢
00000010   82 A2 0D 0A 98 61 91 BD 93 63 94 FC 8D E7 82 A9  ¢..a½cüç©
00000020   82 ED 82 A2 82 A2 0D 0A                          í¢¢..

第二引数に$trueを指定すると、指定のファイルが存在する場合は、そのファイルに追記する。

PS > $sw = New-Object System.IO.StreamWriter($ofile, $true, $enc)
PS > $sw.WriteLine("野口瑠璃子かわいい")
PS > $sw.Close()
PS > Get-Content .\text.txt
石見舞菜香かわいい
和多田美咲かわいい
野口瑠璃子かわいい

第三引数の指定を省略すると、文字コードUTF-8(BOM無し)でファイルは書き込まれる。

PS > $sw = New-Object System.IO.StreamWriter($ofile, $false)
PS > $sw.WriteLine("のぐちゆりかわいい")
PS > $sw.Close()
PS > Get-Content .\text.txt
縺ョ縺舌■繧・j縺九o縺・>
PS > Get-Content -Encoding UTF8 .\text.txt
のぐちゆりかわいい
PS > Format-Hex .\text.txt
           パス: ○○○\text.txt
           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000   E3 81 AE E3 81 90 E3 81 A1 E3 82 86 E3 82 8A E3  ã®ãã¡ããã
00000010   81 8B E3 82 8F E3 81 84 E3 81 84 0D 0A           ããã..

第三引数にUTF-8を指定すると、文字コードUTF-8(BOM付き)でファイルは書き込まれる。

PS > $enc = [System.Text.Encoding]::GetEncoding("utf-8")
PS > $sw = New-Object System.IO.StreamWriter($ofile, $false, $enc)
PS > $sw.WriteLine("のぐちゆりかわいい")
PS > $sw.Close()
PS > Format-Hex .\text.txt
           パス: ○○○\text.txt
           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000   EF BB BF E3 81 AE E3 81 90 E3 81 A1 E3 82 86 E3  ã®ãã¡ãã
00000010   82 8A E3 81 8B E3 82 8F E3 81 84 E3 81 84 0D 0A  ãããã..

UTF-8(BOM無し)を明示したい場合は、New-ObjectコマンドレットでUTF8Encodingクラスを引数を渡さない(もしくは$falseを指定する)でオブジェクトを作成して、それを第三引数に指定することで、明示的にBOM無しのUTF-8にすることができる。

PS > $enc = New-Object System.Text.UTF8Encoding
PS > $sw = New-Object System.IO.StreamWriter($ofile, $false, $enc)
PS > $sw.WriteLine("のぐちゆりかわいい")
PS > $sw.Close()
PS > Format-Hex .\text.txt
           パス: ○○○\text.txt
           00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
00000000   E3 81 AE E3 81 90 E3 81 A1 E3 82 86 E3 82 8A E3  ã®ãã¡ããã
00000010   81 8B E3 82 8F E3 81 84 E3 81 84 0D 0A           ããã..