JScript・WSHで、UTF-8でファイルの読み書きをする方法 (ADODB.Streamで文字コード変換するサンプルコード)
以前、
「バッチで文字列を置換する(JScriptでテキストファイル処理)」の記事で、
JScriptバッチによるファイル入出力の方法を掲載した。
その際は FileSystemObject を使っていたので、文字コードがShift-JISに限定されていた。
サンプルコード
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/...