前提
この記事を書く際に使用したPowerShellのバージョン:5.1.22621.1778
結論
$file = [System.IO.File]::ReadAllText('元ファイルのフルパス',[Text.Encoding]::GetEncoding(932))
[System.IO.File]::WriteAllText('出力するファイルのフルパス',$file)
実際の動き
こんな感じでスクリプトを組む
スクリプト実行前のディレクトリ内がこれ
before.txtの内容がこんな感じ
ちっちゃくて恐縮だが、右下の文字コードがShift JISになっていることがわかると思う
この状態でtest.ps1を実行すると…
以下の通り、after.txtが生成される
文字コードもちゃんとUTF-8になっている
こういう時に使う(使った)
↓みたいな感じでExcelファイルをCSVに変換するPowerShellスクリプトを組んだんだけど、これだとShift-JISでファイル出力されてしまうためPHPで取り扱うには都合が悪く、どうにか同じスクリプト内でUTF-8への変換もやってしまいたいと思った次第。
$excel = New-Object -ComObject Excel.Application
$excel.DisplayAlerts = $false
$excel.Workbooks.open('Excelファイルのフルパス')
$w = $excel.Worksheets.Item('CSVに変換したいシート名')
$w.SaveAs('出力するCSVファイルのフルパス',6)
$excel.Workbooks.Close()
$excel.Quit()
# ちなみにExcelのインスタンスをちゃんと閉じとかないと生成したCSVファイルがロックされて編集・削除ができなくなるゾイ(一敗)
いやこれでSaveAsに文字コード指定オプションとかあったら笑うが──
…………
!?!??!?!?!
いや…まだわからん。もしかしたらBOM付きUTF-8で保存されるとかかもしれんし…
こんな感じ↓でスクリプト組んで…
$b = (Get-Location).Path + "\before.xlsx"
$a = (Get-Location).Path + "\after.csv"
$excel = New-Object -ComObject Excel.Application
$excel.DisplayAlerts = $false
$excel.Workbooks.open($b)
$w = $excel.Worksheets.Item("Sheet1")
$w.SaveAs($a,62)
$excel.Workbooks.Close()
$excel.Quit()
こんな感じのエクセルファイル作って…
test2.ps1を実行!!!
after.csvの中身を覗いてみると…
B、BOM付きか~~~~~~~
これはこれでなんか釈然としないな…