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)」を指定しています。
| 値 | 意味 |
|---|---|
| 13 | CR |
| -1 | CR+LF(規定値) |
| 10 | LF |
WriteText メソッド
WriteTextメソッドは、指定した文字列をストリームオブジェクトに書き込みます。
(注意:ファイルに書き込むのは別のメソッドを使います)
ストリーム.WriteText 文字列, オプション
第1引数に指定された文字列をストリームに書き込みます。
第2引数のオプションの値と意味は次の通りです。
| 値 | 意味 |
|---|---|
| 0 | 文字列だけを書き込む(改行コードなし)。規定値 |
| 1 | 文字列に改行コードを付加 |
改行コードを付加する「1」を指定する場合は、 LineSeparator プロパティを設定しておく必要があります。
SaveToFile メソッド
SaveToFileメソッドは、ストリームの内容をファイルに保存します。
ストリーム.SavaToFile ファイルパス, 保存オプション
第1引数のファイルパスで指定されたファイルに保存します。
第2引数の保存オプションは、ファイルを上書きするかを指定します。 値と意味は次の通りです。
| 値 | 意味 |
|---|---|
| 1 | ファイルが存在しないときは新規作成し、存在する場合はエラーが発生(規定値) |
| 2 | ファイルが存在しないときは新規作成し、存在する場合は上書き保存 |