【VBA】UTF-8のBOM取り
職場ではソース管理とドキュメント管理に
Apache Subversionを利用しています
Apacheには主に認証とログ出力の役割を持たせています
認証自体は外部のドメインコントローラが行い、
認証後の権限はテキストファイル(svnaccessfile)で制御しています
svnaccessfileには権限を設定するリポジトリパスと、
そのパスに対してユーザーに与える権限を記述します
この時、Excelにてユーザー名やリポジトリ名・権限を記載し、
svnaccessfileを出力するようなマクロを利用しています
このsvnaccessfileは文字コードがUTF-8でなければいけないため、
マクロによるテキスト出力はADODBオブジェクトを利用して行っています
(TextStreamオブジェクトではUTF-8は出力できません)
しかし、ただUTF-8にするだけでは正常に作動せず、
BOM(エンディアンを判別するための先頭3バイトのマーク)を削除する必要があります
実装はこのような感じで行いました
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
Private target_txt As Object
Private result_txt As Object
'オブジェクト作成
Set target_txt = CreateObject("ADODB.Stream")
Set result_txt = CreateObject("ADODB.Stream")
〜〜〜〜省略〜〜〜〜
'''BOM削除'''
target_txt.Position = 0 'ファイルの先頭に戻る
target_txt.Type = 1 'テキストからバイナリへ変更
target_txt.Position = 3 'BOMのサイズ分位置をずらす
result_txt.Type = 1 'テキストからバイナリへ変更
result_txt.Open
result_txt.CopyTo result_txt '結果出力ファイルへBOMを抜いた部分をコピー
'ファイル保存
result_txt.SaveToFile "ファイル名" 2
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
中々文字コードなりBOMなりで引っかかったので
備忘録的に載せてみました