ROM無しのUTF-8ファイルを作成する
前回の記事「
Excel VBAでUTF-8形式 HTMLファイルの読み込みと書き込み方法」で作成したファイルをエディタで開いてみると、下のステータスバーに「UTF-8(BOM付き)」と表示されています。
下の赤矢印部分からが、VBAを変更したコードです。
- ADODB.Streamを開き直しています。
- Position = 0 : オブジェクトの先頭からの位置を0バイトにしています。
- Type = 1 : データの種類をバイナリにしています。 デフォルトは2のテキストです。
adTypeBinaryを使用すると、Excel2013でエラーになったため直接値で設定しています。
- Position = 3 : 先頭からの位置を3バイト目にし、これでBOMの部分を飛ばします。
- Read : バイナリで読み込みます。
- Write : バイナリデータを書き込みます。
- SetEOS : 終わりの位置を指定します。
Option Explicit
Private Sub ExUtfSave()
Dim tmp As String
Dim buf As String
Dim fname As String
Dim tobj As Object
Dim i As Long
Dim byteTmp() As Byte
fname = "c:\test\index.html"
Set tobj = CreateObject("ADODB.Stream")
tobj.Charset = "UTF-8"
tobj.LineSeparator = 10
tobj.Open
tobj.LoadFromFile fname
Do Until tobj.EOS
tmp = tobj.ReadText(-2)
buf = buf & tmp
i = i + 1
If i = 2 Then
buf = buf & "<TEST>" & vbLf
End If
Loop
tobj.Close
MsgBox buf
Set tobj = CreateObject("ADODB.Stream")
tobj.Charset = "UTF-8"
tobj.Open
tobj.Writetext buf
tobj.Position = 0
tobj.Type = 1
tobj.Position = 3
byteTmp = tobj.Read
tobj.Close
fname = "c:\test\index6.html"
Set tobj = CreateObject("ADODB.Stream")
tobj.Charset = "UTF-8"
tobj.LineSeparator = 10
tobj.Type = 1
tobj.Open
tobj.Write byteTmp
tobj.SetEOS
tobj.SaveToFile fname, 2
tobj.Close
End Sub
これでファイル内容を変更した結果を、BOM無しのUTF-8ファイルに保存できました。
作成したUTF-8ファイルをエディタで開いた画面です。