読者です 読者をやめる 読者になる 読者になる

がりらぼ

WindowsRuntimeの応援ブログ

PowerShellで巨大なテキストファイルのエンコードを変換する

SQL Serverに入っているデータをUTF-8CSVで使いたいとき、SQL ServerにはUTF-8なエクスポートはサポートしてないので一旦Shift-JISでエクスポート→変換の過程を踏む必要があります。

そしていつも文字コード変換はnotepad++でやってるのですがCSVが巨大だとテキストエディタで開けないので徐々に変換してくれる何かが必要です。

というわけで.NetのStreamReaderとStreamWriterを使ってストリームの中で徐々に変換→書き込みをやっていくプログラムを書きます。最近は簡単なタスクはPowerShellで書くようにしてるので今回はps1ですが.Netのクラスを使ってるのでC#とかでもオッケーです。

Param([string]$in,[string]$out)
$enc_s = [Text.Encoding]::GetEncoding("Shift-JIS")
$enc_u=[Text.Encoding]::GetEncoding("UTF-8")

$reader=New-Object System.IO.StreamReader($in,$enc_s)
$writer=New-Object System.IO.StreamWriter($out,$false,$enc_u)
while(($line=$reader.ReadLine()) -ne $null){
    $writer.WriteLine($line)
}
$reader.Close()
$writer.Close()

Write-Host "complete"

割りと簡単なスクリプトですがこの発想に至るまでに結構かかった...