この記事では複数個のファイルの文字コードをShift_JISからutf-8(BOMなし)に変換する方法について説明しています。
環境:Windows8.1
変換する方法の概要
変換するための命令をPowerShellスクリプトに記述し、そのスクリプトをコマンドプロンプトから実行します。
PowerShellとはコマンドプロンプトより高機能な端末のことです。
PowerShellスクリプトとはPowerShellを操作する命令を記述したファイルのことです。
以下では変換の方法を順を追って説明しています。
PowerShellスクリプトの作成
PowerShellスクリプトの作成の前にこの記事内のスクリプトで何をしているかを先に説明します。
対象となるフォルダ「test」にcppファイル、txtファイル、サブフォルダが含まれています。
フォルダ「test」内にある全てのcppファイルの文字コードをShift_JISからutf-8(BOMなし)に変換します(サブフォルダ内のcppファイルも含みます)。
対象フォルダの構造
では改めてPowerShellスクリプト(以下スクリプトと略記)を作成します。
メモ帳を起動してください。
以下のコードをコピーしてメモ帳に貼り付けます。
$path = "C:\test"
$itemList = Get-ChildItem -File $path -include *.cpp -Recurse
foreach($item in $itemList)
{
$file = [System.IO.File]::ReadAllText($item.FullName,[Text.Encoding]::GetEncoding(932))
[System.IO.File]::WriteAllText($item.FullName,$file)
}
(7,8行は記事の表示の関係で2行になってしまっていますが1行のコードです)
対象フォルダのアドレスを適宜変更してください
上のスクリプトの1行目のC:\testが対象となるフォルダです。このフォルダ以下に含まれるcppファイルは全て(サブフォルダ内のcppファイルも含む)文字コードをShift_JISからutf-8(BOMなし)に変換されます。対象フォルダのアドレスを適宜変更してください
変換するファイルの拡張子を適宜変更してください
3行目の .cppで変換対象のファイル拡張子をcppに設定しています。これを以下のように*.*とすると全ての拡張子のファイルが変換の対象になります。変換するファイルの拡張子を適宜変更してください
$itemList = Get-ChildItem -File $path -include *.* -Recurse
対象フォルダのアドレスと、変換対象ファイルの拡張子を適宜変更したら名前を付けて保存します。
保存場所はどこでもいいです。ファイル名も何でもいいですが拡張子は「.ps1」です(例:changeCode.ps1)。
ファイルの種類は「すべてのファイル」
文字コードは「ANSI」です。
「保存」をクリックします。
上記スクリプトの大雑把な説明
3行目でループに渡すリストを作成しています。対象フォルダ以下に存在する全ての指定拡張子ファイルの情報が$itemListという変数に代入されています。
5行目のループ内では$itemListに格納された要素をひとつづつ取り出しそれに対して操作をしています。
7,8行目では$fileという変数に取り出したファイルの内容を文字コードShift_JISで読み出しています。
(7.8行は記事の表示の関係で2行になってしまっていますが1行のコードです)。このときに[Text.Encoding]::GetEncoding(932)のように記述して文字コードをShift_JISに指定しています。
10行目では$fileの内容を文字コードutf-8(BOMなし)で書き込んでいます。書き込み先は上で読み出したファイルです。つまり文字コードを変更して上書きしています。
[System.IO.File]::WriteAllText($item.FullName,$file) のように文字コードを指定しないと文字コードはutf-8(BOMなし)で指定したことになります。
スクリプトが完成したのでコマンドプロンプトからそれを実行します。
スクリプトに関しての注意
このスクリプトを実行すると、上に書いた通り既存のファイルの文字コードを変更して上書きします。もしもの時のためにバックアップを取っておくことをお勧めします。
コマンドプロンプトでスクリプトを実行する
コマンドプロンプトを起動します。キーボード左下部のウィンドウズキーとRキーを同時に押します。以下のように「ファイル名を指定して実行」が起動するので「cmd」と入力して「OK」をクリックします。
コマンドプロンプトが起動したら先ほど作成したスクリプトの保存されたフォルダに移動します。
移動方法は 「cd スクリプトの保存フォルダのフルパス」を入力してenterキーを押します。
(この記事では c:\PowerShell に移動しています)
以下の画像のように入力したパスが、>(プロンプト)の左に表示されていれば移動成功です。
スクリプトの実行
下のように入力しenterキーを押すことでスクリプトを実行できます。
PowerShell -ExecutionPolicy RemoteSigned -file スクリプト名
この記事の場合だと PowerShell -ExecutionPolicy RemoteSigned -file changeCode.ps1 です。
PowerShellスクリプトを使うときには実行ポリシーを指定しない実行できません。
実行ポリシーを -ExecutionPolicy RemoteSigned に指定することで一時的にスクリプトを実行できるようになります。
enterキーを押せば変換が実行されます。
文字コードが変換されたか確認
サクラエディタで変換されたか確認してみました。
まとめ
この記事では複数個のファイルの文字コードをShift_JISからutf-8(BOMなし)に変換する方法を説明しました。
この記事は以上です。