怠日記

写真・金魚・昆虫・プログラミングの趣味を語るサイトです。似たようなことをnoteにも書いたり書いてなかったり。

VBScript - テキストファイルの文字コードを変換する

Stream オブジェクトを使って、テキストファイルの文字コードを変換する方法を紹介する。

サンプルスクリプト

以下のスクリプトは、EUC-JP のテキストファイルを UTF-8 に変換する。

With CreateObject("ADODB.Stream")
    '--------------------
    ' テキストファイルを読み取る
    '--------------------
    .Type = 2     '2: テキストデータを扱う
    .Charset = "euc-jp"
    .Open
    .LoadFromFile "C:\path\to\file.txt"
    Dim readedContent
    readedContent = .ReadText
    '--------------------
    ' 読み取ったデータを書き戻す
    '--------------------
    .Position = 0
    .Charset = "utf-8"
    .WriteText readedContent
    .SetEOS
    '保存して閉じる
    .SaveToFile "C:\path\to\new-file.txt"
    .Close
End With

説明

Stream オブジェクトのプロパティを設定する。

テキストデータを扱うため、Type プロパティに 2 を設定する。

読み取るテキストファイルの文字コードCharset プロパティに設定する。
今回は EUC-JP なので “euc-jp” と指定する。

.Type = 2     '2: テキストデータを扱う
.Charset = "euc-jp"

Open メソッドでストリームを開く。

LoadFromFile メソッドで、指定したファイルをストリームに読み込む。

.Open
.LoadFromFile "C:\path\to\file.txt"

ReadText メソッドでデータを読み取り、変数に保持しておく。

Dim readedContent
readedContent = .ReadText

読み取ったデータをストリームに書き戻す。

Position プロパティに 0 を設定し、ストリームの位置を先頭に戻す。
(ストリームの位置が先頭にないと、文字コードが設定できないため)

変換後の文字コードCharset プロパティに設定する。
今回は UTF-8 にしたいので “utf-8” と指定する。

WriteText メソッドで変数に保持していたデータを書き出す。

SetEOS メソッドで書き出しが終わった位置をストリームの末尾に設定する。

.Position = 0
.Charset = "utf-8"
.WriteText readedContent
.SetEOS

SaveToFile メソッドでストリームのデータをテキストファイルに書き込む。

Close メソッドでストリームを閉じる。

.SaveToFile "C:\path\to\new-file.txt"
.Close

以上で文字コード変換は完了。