VBAでBOM無しUTF-8テキストを出力する
javadocのpackage-info.javaをマクロでまとめて出力しようとしたのだが、OPEN - CLOSE ではShift-JIS、FileSystemObjectではUTF-16かASCIIでしか出力できない模様。
この記述を参考にコードを作成。
'## ファイル出力 - 開始 ## Dim bytData() As Byte With CreateObject("ADODB.Stream") .Open ' UTF-8に変換 ' .Type = adTypeText .Type = 2 .Charset = "UTF-8" .WriteText "/**", 1 '改行する .WriteText " * XXX, 1 ' .WriteText " * <pre>", 1 ' .WriteText " * YYY", 1 ' .WriteText " * </pre>", 1 ' .WriteText " */", 1 ' .WriteText "package jp.co.hoge;", 1 ' ' 先頭のBOM取り .Position = 0 ' .Type = adTypeBinary .Type = 1 .Position = 3 bytData = .Read .Close ' UTF-8Nコードのデータを保存 .Open ' .Type = adTypeBinary .Type = 1 .Write bytData ' .SaveToFile "C:\package-info.java", adSaveCreateOverWrite .SaveToFile "C:\package-info.java", 2 .Close End With '## ファイル出力 - 終了 ##
- テキストモードでストリームに書込
- バイナリモードで先頭のBOMを飛ばして読込
- 保存
みたいな感じか。なるほど。