プログラム研究所
ソフトウェア開発やプログラミングの豆知識を載せています。
04 | 2018/05 | 06
S M T W T F S
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

UTF-8ファイルの作成
スクリプト系プログラムでテキストファイルを作成する場合、FileSystemObject は shift-jis しかサポートしないが、ADODB.Stream を利用することで unicode など色々なエンコードを取り扱うことができる。本稿はまずは簡単なファイルを出力する場合についてまとめている。

基本的なファイル作成の手順

書き込みストリームはそのタイプやエンコードを指定してオープンすると、末尾にどんどんデータをつないでいけるメモリブロックである。ファイルに書きこむとか他のストリームにコピーするなどして用が済んだらクローズすることでメモリブロックが解放される。

  1. ADODB.Stream オブジェクトの作成
    Set txtStream = CreateObject("ADODB.Stream")
  2. ストリームのオープン
    With txtStream .type = 2 ' 1:バイナリデータ, 2:テキストデータ .charset = "shift-jis" ' 出力ファイルの文字コード設定 .open End With

    指定できる charset は、HKEY_CLASSES_ROOT\MIME\Database\Charset の配下のエントリを参照。

  3. ストリームに文字列を書き込む
    With txtStream .WriteText "Hello,world.", 1 ' 0:文字列のみ書き込む 1:文字列+改行を書き込む .WriteText "日本語文字列", 1 End With
  4. ストリームをファイルに出力する
    With txtStream .SaveToFile "sjis.txt", 2 ' 1:ファイル作成, 2:上書き .Close End With
  5. ADODB.Stream オブジェクトの解放
    Set txtStream = Nothing

同じファイルを utf-8 でエンコーディングしたい場合

charset を変更するだけで良い。簡単である。

  • 上記の手順をまとめて記述した例
    Set txtStream = CreateObject("ADODB.Stream") With txtStream .type = 2 ' 1:バイナリデータ, 2:テキストデータ .charset = "utf-8" ' 出力ファイルの文字コード設定 .open .WriteText "Hello,world.", 1 ' 0:文字列のみ書き込む 1:文字列+改行を書き込む .WriteText "日本語文字列", 1 .SaveToFile "utf8.txt", 2 ' 1:ファイル作成, 2:上書き .Close End With Set txtStream = Nothing

BOMが邪魔なとき

上記のコードで utf-8 でファイルを作成すると先頭に3バイトの BOM が付く。取り除きたいときは次のようにする。

  1. ADODB.Stream オブジェクトの作成
    Set txtStream = CreateObject("ADODB.Stream")
  2. ストリームのオープン
    With txtStream .type = 2 ' 1:バイナリデータ, 2:テキストデータ .charset = "utf-8" ' 出力ファイルの文字コード設定 .open End With
  3. ストリームに文字列を書き込む
    With txtStream .WriteText "Hello,world.", 1 ' 0:文字列のみ書き込む 1:文字列+改行を書き込む .WriteText "日本語文字列", 1 End With
  4. と、ここまでは同じだが、txtStream の先頭3バイトを取り除いたデータ列をファイルに出力したい。

  5. もう一つバイナリのストリームを作成する
    Set outStream = CreateObject("ADODB.Stream") With outStream .Type = 1 ' 1:バイナリデータ, 2:テキストデータ .Open End With
  6. txtStream の +3バイト目から先を outStream にコピーする
    With txtStream .Position = 3 .CopyTo outStream End With
  7. outStream をファイルに出力する
    With outStream .SaveToFile "utf8-nobom.txt", 2 ' 1:ファイル作成, 2:上書き .Close End With
  8. outStream を解放する
    Set outStream = Nothing
  9. 望みのファイルができたので txtStream の後始末をする。

  10. txtStreamをクローズする
    txtStream.close
  11. txtStream を解放する
    Set txtStream = Nothing

これで先頭 3バイトの BOM が取り除かれた utf-8 ファイルが作成されます。


スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。