AccessでUTF-8のファイルをインポートしようとしたとき、
ビューで先頭に「・ソ」と表示された謎の文字がついていて、正しくインポートできなかった。
どうもこれはBOMらしい。
バイナリエディタで削除はできるけど、自動で削除する方法を2つほど見つけたのでメモ。
コードを書く前に参照設定で「Microsoft ActiveX Data Objects ~」を有効にすること。
BOMは先頭3バイトに着いてくる。
ならば4バイト目から先を出力しなおせばいいんだという手法。
ただし、ファイルが大きすぎるとメモリに入りきらないためエラー落ちする。
280MBまではちゃんと動いた、660MBではだめでした。
==================================================================
Dim readStream As ADODB.Stream
Dim writeStream As ADODB.Stream
Dim readFile As String
Dim writeFile As String
readFile = "C:\BOM付きファイル.txt"
writeFile = "C:\BOM無しファイル.txt"
' 4バイト目から読み込む
Set readStream = CreateObject("ADODB.Stream")
readStream.Open
readStream.Type = adTypeBinary
readStream.LoadFromFile (readFile)
readStream.Position = 3
' 出力ファイルをオープン
Set writeStream = CreateObject("ADODB.Stream")
writeStream.Open
writeStream.Type = adTypeBinary
' 読み込んだデータをそのままファイルに出力する(4バイト目以降を出力)
writeStream.Write (readStream.Read(adReadAll))
writeStream.SaveToFile writeFile, adSaveCreateOverWrite
' ファイルをクローズ
writeStream.Close
Set writeStream = Nothing
readStream.Close
Set readStream = Nothing
==================================================================
==================================================================
これはよくわからないが、たしかに削除できる。
ただし、Unicodeで保存されてしまう。
そのうち理解できたら役に立つかも。
cmd /u /c type BOMありUnicodeファイル > BOMなしUnicodeファイル
0 件のコメント:
コメントを投稿