VBScriptでUTF-8(BOM付)ファイルからBOMを除去する
VBScriptでUTF-8(BOM付)ファイルからBOMを除去する方法を紹介します。
コーディング例
BOM除去.vbs
Option Explicit Const READ_SIZE = 1048576 ' 1MByte(1024 * 1024) Dim objArg ' 引数 Set objArg = WScript.Arguments ' 引数チェック If objArg.Count <> 1 Then WScript.Echo "引数にファイルパスを指定してください。" WScript.Quit End If Dim objFSO ' FileSystemObject Dim strInputPath ' 入力ファイルパス Dim strOutputPath ' 出力ファイルパス Dim objInputStream ' 入力ファイルストリーム Dim objOutputStream ' 出力ファイルストリーム Dim strData ' データ Set objFSO = CreateObject("Scripting.FileSystemObject") strInputPath = objArg(0) strOutputPath = objFSO.BuildPath(objFSO.GetParentFolderName(strInputPath), "@" & objFSO.GetFileName(strInputPath)) ' 入力ファイルオープン Set objInputStream = CreateObject("ADODB.Stream") objInputStream.Type = 1 ' バイナリモード objInputStream.Open objInputStream.LoadFromFile(strInputPath) objInputStream.Position = 3 ' 出力ファイルオープン Set objOutputStream = CreateObject("ADODB.Stream") objOutputStream.Open objOutputStream.Type = 1 ' バイナリモード ' 入力ファイル⇒出力ファイル(BOM除去) Do Until objInputStream.EOS strData = objInputStream.Read(READ_SIZE) objOutputStream.Write strData Loop objOutputStream.SetEOS ' 出力ファイル保存 objOutputStream.SaveToFile strOutputPath, 2 objInputStream.Close objOutputStream.Close Set objInputStream = Nothing Set objOutputStream = Nothing
実行結果
Sample.txt
@Sample.txt
BOMとは「Byte Order Mark」の略で、簡単に言うとファイルの文字コードをUTF-8で書いたことをPCへ知らせるためのコードです。
BOM付のUTF-8ファイルには先頭に3バイトの「EF BB BF」が付きます。
今回のプログラムでは引数のUTF-8(BOM付)ファイルから先頭3バイトを除去したファイルを作成します。
今回のプログラムはコマンドプロンプトから引数にファイルパスを指定する、または、ファイルをBOM除去.vbsへドラッグ&ドロップすることで動作します。
8~11行目では引数有無のチェックを行っています。
20行目でファイル操作を行うオブジェクトであるFileSystemObjectを生成しています。
21行目で変数strInputPathに引数のファイルパスを代入し、22行目で変数strOutputPathに出力ファイルのパスを指定しています。
ここでは入力ファイル名の先頭に「@」を付けた名前を出力ファイル名としています。
25行目でADODB.Streamを生成し、26行目でバイナリモードに設定し、27行目でストリームをオープンし、28行目で入力ファイルを読み込み、29行目でポジションを4バイト目(先頭は0)に変更しています。
同じく32~34行目では出力用のストリームをバイナリモードで生成しています。
37~40行目では入力ストリームから1MByteずつ読み込み、出力ストリームへ出力し、入力ファイルの終端まで繰り返します。
41行目で出力ストリームの終端にEOS(End Of Stream)を出力しています。
44行目で出力ストリームを出力ファイルに保存しています。
以上、VBScriptでUTF-8(BOM付)ファイルからBOMを除去する方法の紹介でした。