ExcelでBOM無しUTF-8のCSVファイルを化けずに開くPowerShellスクリプト

ExcelUTF-8(BOM無し)のCSVファイルを開くと文字化けしてしまう。

テキストエディタUTF-8(BOM付き)に変換すれば化けずに開けるのだが、面倒なので自動変換するPowerShellスクリプトを作成した。

挙動

スクリプトへのショートカット(後述)にCSVファイルをドロップすると、一時ディレクトリにUTF-8(BOM付き)版のコピーが作成され、関連付けされたアプリで開かれる。*1

コード

$srcFilePath = $args[0]
$srcFileName = Split-Path $srcFilePath -Leaf

# テンポラリディレクトリ作成
$tempDirName = "TempDir_$(Get-Date -Format 'yyyyMMddHHmmss')"
$tempDirPath = Join-Path -Path $env:TEMP -ChildPath $tempDirName
$tempFilePath = Join-Path -Path $tempDirPath -ChildPath $srcFileName
New-Item -ItemType Directory -Path $tempDirPath

# 読み込み
$content = Get-Content -Path $srcFilePath

# BOM付きUTF8で保存
Set-Content -Path $tempFilePath -Value $content -Encoding UTF8BOM

# オープン
Start-Process $tempFilePath

上記のスクリプトを適当な場所に保存し、次のようなパスでショートカットを作成する。*2

pwsh.exe -ExecutionPolicy RemoteSigned -File "ここにps1ファイルのパスを入れる"

作成したショートカットにCSVファイルをドロップすると、UTF-8(BOM付き)に変換されたファイルが自動で生成され、開かれる。

*1:CSVの閲覧が目的で、更新は考慮していない。

*2:WindowsプリインストールのPowerShellでは無く、ストア等から導入する新しいバージョンのPowerShellで動かす必要が有る。