VBScript で UTF-8 のテキストファイルを読み込む・書き出す
過去に FileSystemObject を使って、Shift-JIS や UTF-16 でエンコードされたテキストファイルの読み書きはできた。
今回は、HTML5 時代のデフォルトといえる、UTF-8 でテキストの読み書きをしてみる。
CreateTextFileの第3引数をtrueにするとUTF-16でファイルを作る。falseにするとShift_JIS。UTF-8で作ることはできない。UTF-8で作りたいときはFileSystemObjectではなくADODB.Streamを使う。
ということで、ADODB.Stream というものを使うと良いらしい。
今回は UTF-8 でエンコードされている inputText.txt
から1行ずつテキストを読み込み、同じく UTF-8 の outputText.txt
を新規作成してテキストを書き込む、というサンプル。文字列置換やら何やらは一切していないので、実際は input.ReadText(-2)
あたりで取得した文字列をよしなにして output.WriteText
するイメージか。
' 読み込みファイルの指定 (相対パスなのでこのスクリプトと同じフォルダに置いておくこと)
Dim input
Set input = CreateObject("ADODB.Stream")
input.Type = 2 ' 1 : バイナリ・2 : テキスト
input.Charset = "UTF-8" ' 文字コード指定
input.Open ' Stream オブジェクトを開く
input.LoadFromFile "inputText.txt" ' ファイルを読み込む
' 書き出しファイルの指定 (今回は新規作成する)
Dim output
Set output = CreateObject("ADODB.Stream")
output.Type = 2
output.Charset = "UTF-8"
output.Open
' 読み込みファイルから1行ずつ読み込み、書き出しファイルに書き出すのを最終行まで繰り返す
Dim records
Do Until input.EOS
Dim lineStr
lineStr = input.ReadText(-2) ' -1 : 全行読み込み・-2 : 一行読み込み
output.WriteText lineStr, 1 ' 0 : 文字列のみ書き込み・1 : 文字列 + 改行を書き込み
Loop
' 書き出しファイルの保存
output.SaveToFile "outputText.txt", 2 '1 : 指定ファイルがなければ新規作成・2 : ファイルがある場合は上書き
' Stream を閉じる
input.Close
output.Close
このやり方だと「BOM 付き UTF-8」になる
こうして作成した outputText.txt
は、BOM 付きの UTF-8 になってしまう。ADODB.Stream の設定で BOM なしにはできないので、一旦バイナリに変換して先頭3バイト (Byte Order Mark 部分) を飛ばして書き直す、という処理をしてやる必要がある。この手順は別途解説する。