VBScriptでUTF-8(BOM付)ファイルからBOMを除去する

VBScriptVBScript

記事内に広告が含まれています。

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

@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を除去する方法の紹介でした。

システムトラストでは一緒に働いていただける仲間を募集中です。
株式会社システムトラスト

システムトラストでは、システムエンジニア、プログラマーなどを随時募集中です。気軽にご相談ください。

お問合せ