テキストファイルの文字コードを変換する
テキストファイルの文字コードを変換するプログラムを作成しました。shift-jisのファイルをeuc-jpに変換します。StreamReaderオブジェクトのreadtoend()メソッド使用してファイルの文字列をすべて取得します。オブジェクトを生成する際はshift-jisを指定します。次に、読み込んだファイルをコピーしバックアップファイルを作成します。最後にStreamWriterオブジェクトのwrite()メソッド使用して取得した文字列を書き込みます。オブジェクトを生成する際はeuc-jpを指定します。プログラムを実行するときは、変換する1つのファイルパスを引数に指定します。(フルパスで指定しないとエラーになります。)
set-PSDebug -strict # --------------------------------- # テキストファイルの文字コードを変換する # (shift-jis → euc-jp) # 引数:テキストファイルのフルパス # --------------------------------- Function ConvCharCode{ # --------------------------------- # 事前準備 # --------------------------------- # 引数を取得する param([string]$file_path) # 文字コード名設定 [String]$in_code = "shift-jis" # 入力用 [String]$out_code = "euc-jp" # 出力用 # encodingオブジェクト取得 $in_encoding = [System.Text.Encoding]::GetEncoding($in_code) # 入力用 $out_encoding = [System.Text.Encoding]::GetEncoding($out_code) # 出力用 # --------------------------------- # ファイル読み込み(shift-jis) # --------------------------------- # 読み込み用ストリームオブジェクト生成 $rstream_obj = new-Object system.IO.StreamReader($file_path,$in_encoding) # 現在位置から最後まで読み込み $read_str = "" $read_str = $rstream_obj.readtoend() # ファイルクローズ $rstream_obj.close() # --------------------------------- # バックアップを作成する # --------------------------------- # バックアップファイル名設定 $bkfile_path = $file_path + ".bak" # バックアップファイルが既に存在する場合は削除する if (test-Path -path $bkfile_path -type leaf){ (get-Item $bkfile_path).delete() } # バックアップを作成する [void](get-Item $file_path).copyto($bkfile_path) # --------------------------------- # ファイル書き込み(euc-jp) # --------------------------------- # 書き込み用ストリームオブジェクト生成 $wstream_obj = new-Object system.IO.StreamWriter($file_path,$false,$out_encoding) # 読み込んだ文字をすべて書き込み $wstream_obj.write($read_str) # ファイルクローズ $wstream_obj.close() }