読者です 読者をやめる 読者になる 読者になる
スポンサーリンク

JScript・WSHで、UTF-8でファイルの読み書きをする方法 (ADODB.Streamで文字コード変換するサンプルコード)

WSH/JScript


以前、
バッチで文字列を置換する(JScriptでテキストファイル処理)」の記事で、
JScriptバッチによるファイル入出力の方法を掲載した。


その際は FileSystemObject を使っていたので、文字コードがShift-JISに限定されていた。

ADODBを使えば,文字コードの種類を増やせる

もしFileSystemObjectのかわりにADODB.Streamを利用すれば、ファイルタイプやエンコーディングの面でもっと柔軟に処理できる。


例として、SJISで書かれたテキストの内容を置換して、新テキストをUTF-8で保存してみる。

サンプルコード

a.txt (sjis)

ほげ hoge ほげ
ほげほげ

ほげ


convert.js


/* -------   定数   -------- */


// 保存データの種類
		// StreamTypeEnum
		// http://msdn.microsoft.com/ja-jp/library/cc389884.aspx
var adTypeBinary = 1; // バイナリ
var adTypeText   = 2; // テキスト

// 読み込み方法
		// StreamReadEnum
		// http://msdn.microsoft.com/ja-jp/library/cc389881.aspx
var adReadAll  = -1; // 全行
var adReadLine = -2; // 一行ごと

// 書き込み方法
		// StreamWriteEnum
		// http://msdn.microsoft.com/ja-jp/library/cc389886.aspx
var adWriteChar = 0; // 改行なし
var adWriteLine = 1; // 改行あり

// ファイルの保存方法
		// SaveOptionsEnum 
		// http://msdn.microsoft.com/ja-jp/library/cc389870.aspx
var adSaveCreateNotExist  = 1; // ない場合は新規作成
var adSaveCreateOverWrite = 2; // ある場合は上書き


/* -------   処理ここから   -------- */

var file_from = "a.txt";
var file_to   = "b.txt";


// 読み込み
var sr = new ActiveXObject("ADODB.Stream");
sr.Type = adTypeText;
sr.charset = "Shift_JIS";
sr.Open();
sr.LoadFromFile( file_from );
var temp = sr.ReadText( adReadAll );
sr.Close();

// 書き込み
var sw = new ActiveXObject("ADODB.Stream");
sw.Type = adTypeText;
sw.charset = "utf-8";
sw.Open();
sw.WriteText(
	temp.replace( new RegExp( "ほげ","g" ), "ふが" )
	,
	adWriteLine
);
sw.SaveToFile( file_to, adSaveCreateOverWrite );
sw.Close();

実行してみる

これで、convert.js をダブルクリックすると b.txt が生成される。


b.txt (utf8)

ふが hoge ふが
ふがふが

ふが

ただし問題点が

※ただ悩みが一点ある。
このコードは、ウィルス対策ソフトに引っかかって、ローカルに保存できない可能性があるのだ…。

その悩みを解決した記事はこちら。
http://language-and-engineering.hatenablog.jp/entry/20090216/p1

参考資料:

ADODB.Streamでファイル読み込み@Excel マクロ・VBA
http://www.cocoaliz.com/excelVBA/inde...

jscriptで utf8なファイル出力
http://passing.breeze.cc/mt/archives/...