前提
この記事を書く際に使用したPowerShellのバージョン:5.1.22621.1778
結論
$file = [System.IO.File]::ReadAllText('元ファイルのフルパス',[Text.Encoding]::GetEncoding(932))
[System.IO.File]::WriteAllText('出力するファイルのフルパス',$file)
実際の動き
こんな感じでスクリプトを組む
![](https://blog.extend-col.org/cms/wp-content/uploads/2023/10/image.png)
スクリプト実行前のディレクトリ内がこれ
![](https://blog.extend-col.org/cms/wp-content/uploads/2023/10/image-1.png)
before.txtの内容がこんな感じ
ちっちゃくて恐縮だが、右下の文字コードがShift JISになっていることがわかると思う
![](https://blog.extend-col.org/cms/wp-content/uploads/2023/10/image-3.png)
この状態でtest.ps1を実行すると…
以下の通り、after.txtが生成される
![](https://blog.extend-col.org/cms/wp-content/uploads/2023/10/image-4.png)
文字コードもちゃんとUTF-8になっている
![](https://blog.extend-col.org/cms/wp-content/uploads/2023/10/image-5.png)
こういう時に使う(使った)
↓みたいな感じで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に文字コード指定オプションとかあったら笑うが──
![](https://blog.extend-col.org/cms/wp-content/uploads/2023/10/image-6.png)
…………
![](https://blog.extend-col.org/cms/wp-content/uploads/2023/10/image-7.png)
!?!??!?!?!
いや…まだわからん。もしかしたら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()
こんな感じのエクセルファイル作って…
![](https://blog.extend-col.org/cms/wp-content/uploads/2023/10/image-8.png)
![](https://blog.extend-col.org/cms/wp-content/uploads/2023/10/image-9.png)
test2.ps1を実行!!!
![](https://blog.extend-col.org/cms/wp-content/uploads/2023/10/image-10.png)
after.csvの中身を覗いてみると…
![](https://blog.extend-col.org/cms/wp-content/uploads/2023/10/image-11.png)
B、BOM付きか~~~~~~~
これはこれでなんか釈然としないな…