メイン画像

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

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


Stream オブジェクトを使って、テキストファイルの文字コードを変換できます。

文字コードを変換するには、次の順に処理します。

  1. 変換前の文字コードで、テキストファイルを読み取る。
  2. 変換したい文字コードで読み取ったデータを書き出す。

サンプルスクリプト

以下のスクリプトは、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

以上でファイル変換は完了です。

Charset プロパティに設定できる内容を調べる

Charset プロパティには文字セットを表す文字列が指定できます。

システムが認識できる文字セットの文字列を調べるには、Windows レジストリの HKEY_CLASSES_ROOT\MIME\Database\Charset のサブキーを参照します。

 

コマンドプロンプトより、次のように REG コマンドを実行すると簡単に調べられます。

REG QUERY "HKCR\MIME\Database\Charset"

実行例(実行結果はだいぶ抜粋しています)

C:\Users\username>REG QUERY "HKCR\MIME\Database\Charset"

HKEY_CLASSES_ROOT\MIME\Database\Charset\ascii
HKEY_CLASSES_ROOT\MIME\Database\Charset\euc-jp
HKEY_CLASSES_ROOT\MIME\Database\Charset\shift-jis
HKEY_CLASSES_ROOT\MIME\Database\Charset\shift_jis
HKEY_CLASSES_ROOT\MIME\Database\Charset\unicode
HKEY_CLASSES_ROOT\MIME\Database\Charset\utf-8

HKEY_CLASSES_ROOT\MIME\Database\Charset\ より後ろの文字列が Charset プロパティに指定できる内容となります。

たとえば HKEY_CLASSES_ROOT\MIME\Database\Charset\shift_jis であれば shift_jis とします。

 

ちなみに utf-8 を指定した場合、BOM付きの UTF-8 になります。

BOM なしにしたい場合、以下のリンク先にあるように、ひと手間かけて取り除いてあげる必要があります。

VBScript でのファイル入出力(UTF-8編)


アカウントを作成 して、もっと沢山の記事を読みませんか?


この記事が気に入ったら ことりと さんを応援しませんか?
メッセージを添えてチップを送ることができます。


この記事にコメントをしてみませんか?


酒とアクアリウムが最近の楽しみ。

おすすめの記事