VBScript: UTF-8でファイルに書き込む

VBScriptで文字コード(文字エンコーディング) がUTF-8でファイルに書き込む場合は、 ADODB.Stream オブジェクトを利用します。

ファイルの読み書きで通常使用するファイルシステムオブジェクトだと Shift-JISかUnicode(UTF-16)の読み書きしかできません。 そこで ADODB.Stream オブジェクトを利用してUTF-8でファイルへ書き込みます。

ADODB.Stream オブジェクトでは複数のメソッドやプロパティを設定する必要があるため、 ファイルシステムオブジェクトを利用する時よりも少し面倒です。

メソッドやプロパティの詳細についてはMicrosoftのページが参考になります。
(Stream オブジェクトのプロパティ、メソッド、およびイベント | Microsoft Docs)

UTF-8でテキストファイルに書き込む

以下のサンプルコードは、 テキストファイル「c.txt」に文字エンコーディング「UTF-8」 で書き込んでいます。

strFile = "d:\test\vbs\c.txt"

strAll = "UTF-8のファイルです。"

'ADODBオブジェクト作成
Set objAdo = CreateObject("ADODB.Stream")

'ストリームオブジェクトをオープン
objAdo.Open

objAdo.Type = 2               ' テキストファイル
objAdo.Charset = "UTF-8"      ' 文字コード
objAdo.LineSeparator = 10     ' 区切り文字 (LF)

'ストリームオブジェクトに書き込む
objado.WriteText strAll, 1

'ストリームの内容をファイルに保存
objado.SaveToFile strFile, 2

' クローズ
objAdo.Close

Open メソッド

Open メソッドはストリームオブジェクトを開き、 データのストリームを操作します。

'ストリームオブジェクトをオープン
objAdo.Open

Type プロパティ

Type プロパティではストリームに格納されているデータが バイナリかテキストかを指定します。規定値は2なので省略しても大丈夫です。

意味
1バイナリデータ
2テキストデータ

Charset プロパティ

Charsetプロパティでは文字セットを指定します。 規定値はUnicode(UTF-16)です。

今回は「"UTF-8"」と指定しています。

LineSeparator プロパティ

「LinSeparator」プロパティでは改行文字を指定します。 指定する値は次の通りです。
今回のサンプルコードでは「10(LF)」を指定しています。

意味
13CR
-1CR+LF(規定値)
10LF

WriteText メソッド

WriteTextメソッドは、指定した文字列をストリームオブジェクトに書き込みます。
(注意:ファイルに書き込むのは別のメソッドを使います)

書式
ストリーム.WriteText 文字列, オプション

第1引数に指定された文字列をストリームに書き込みます。

第2引数のオプションの値と意味は次の通りです。

意味
0文字列だけを書き込む(改行コードなし)。規定値
1文字列に改行コードを付加

改行コードを付加する「1」を指定する場合は、 LineSeparator プロパティを設定しておく必要があります。

SaveToFile メソッド

SaveToFileメソッドは、ストリームの内容をファイルに保存します。

書式
ストリーム.SavaToFile ファイルパス, 保存オプション

第1引数のファイルパスで指定されたファイルに保存します。

第2引数の保存オプションは、ファイルを上書きするかを指定します。 値と意味は次の通りです。

意味
1ファイルが存在しないときは新規作成し、存在する場合はエラーが発生(規定値)
2ファイルが存在しないときは新規作成し、存在する場合は上書き保存
VBScript入門