BLOG
VBA BOMなしUTF-8でファイル保存
2015/3/29
VBAでBOM除去する方法です。
まずはいつも通りADODB.Streamを使ってデータを追加する。
1 2 3 4 5 6 |
Dim testStream As ADODB.Stream Set testStream = New ADODB.Stream testStream.Type = adTypeText testStream.Charset = "UTF-8" testStream.Open testStream.WriteText "サンプル", adWriteLine |
そして下記を追加。
1 2 3 4 5 6 7 8 |
Dim byteData() As Byte testStream.Position = 0 testStream.Type = adTypeBinary testStream.Position = 3 byteData = testStream.Read testStream.Close testStream.Open testStream.Write byteData |
仕組みは
バイナリデータを保持するバイト配列を用意。
ストリームのカーソル位置を0バイト目にする。
ストリームのデータタイプをバイナリに変更する。
ストリームのカーソル位置を3バイト目に変更する。
※BOMは先頭3バイトのデータなので
現在のカーソル位置以降のデータをすべてバイト配列に保持する。
ストリームを閉じる。
再度ストリームを開く。
BOMを飛ばしたバイトデータをストリームに書き込む。
Tag:VBA