VBScriptでUTF-8(BOM付)ファイルからBOMを除去する
VBScriptでUTF-8(BOM付)ファイルからBOMを除去する方法を紹介します。
コーディング例
BOM除去.vbs
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | 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を除去する方法の紹介でした。