文字コードをUTF-8で保存したい。のでやる。
BOM付きでファイルを保存する
参考サイト
・[Excel]Excel VBAでUTF-8のテキストファイルを扱う(ADODB.Stream)
ADODB.Streamとやらを使えばよござんす、ということで。
/*---------------------------------------------------------------------------*/
Sub saveFile(filename, data)
' ADODB.Streamのモード
Dim adTypeBinary : adTypeBinary = 1
Dim adTypeText : adTypeText = 2
Dim adSaveCreateOverWrite : adSaveCreateOverWrite = 2
' ADODB.Streamを作成
Dim adodb : Set adodb = CreateObject("ADODB.Stream")
' データを書き込む
With adodb
.Type = adTypeText
.Charset = "UTF-8"
.Open
.WriteText data
.SaveToFile filename, adSaveCreateOverWrite
.Close
End With
End Sub
/*---------------------------------------------------------------------------*/
渡されたデータをUTF-8で保存するためのプロシージャを作成。
ADODB.Streamにデータを書き込み保存している。
BOMなしでファイルを保存する
環境によってはBOMがあるとエラーを起こすので、BOMなしでの保存もやってみる。
参考サイト
/*---------------------------------------------------------------------------*/
' BOMデータのバイトサイズ
Dim bomSize As Integer: bomSize = 3
' データを書き込む
With temp
.Type = adTypeText
.Charset = "UTF-8"
.Open
.WriteText data
End With
' BOMを飛ばす
With temp
.Position = 0
.Type = adTypeBinary
.Position = bomSize
End With
' 出力用のストリームを使って出力
With output
.Type = adTypeBinary
.Open
.Write temp.Read()
.SaveToFile filename, adSaveCreateOverWrite
.Close
End With
' ストリームを閉じる
temp.Close
/*---------------------------------------------------------------------------*/
すでにストリームが作成されている前提のサンプル。
データを書き込んだストリームのデータ位置をBOMを飛ばした位置に設定。
出力用のストリームに書き込み保存している。
出力用のストリームのCharsetプロパティを弄ると
「このコンテキストで操作は許可されていません」
というエラーが出たのでしないように。ここで割りと悩んだ。
0 件のコメント:
コメントを投稿