このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。
JavaScript は、ブラウザ上で動作する言語だ。
そのため、セキュリティ上の問題もあり、
ファイルアクセスの API は用意されていない。
そのため、ファイルアクセスを行うためには、
外部の COM オブジェクトの力を借りる必要がある。
WSH から利用できるオブジェクトは 2 つ。
・Scripting.FileSystemObject から取得する TextStream
・ADODB.Stream
FileSystemObject は、WSH でも使われており、
昨日使った WScript.StdErr も TextStream である。
TextStream は、名前の通り、テキストファイルへの
アクセスを行うことができるオブジェクトであり、
Shift_JIS と、UTF16 の文字コードに対応している。
ADODB.Stream の方は、柔軟で多機能なオブジェクトだ。
Internet Explorer の脆弱性につけこみ、
ADODB.Stream を使ったコードが、
セキュリティの問題となったことで有名になった。
元は ADO というデータベースアクセス系の API の
一部としての役割でしかなかったのだが、
プログラマにとって魅力的な機能を備えており、
次第に独立して使われるようになってきた。
このオブジェクトは非常に強力であり、
テキストだけでなく、バイナリ入出力、
そして自動、手動での文字コードの変換も可能だ。
今後のことを考えて、ADODB.Stream を使うことにしよう。
では、ADODB.Stream を使って、UTF-8 で保存してみよう。
var stream = new ActiveXObject("ADODB.Stream");
stream.Open();
stream.Type = 2; // adTypeText
stream.Charset = "UTF-8";
stream.LineSeparator = -1; // adCRLF
stream.WriteText("日本語文字列", 1); // adWriteLine
stream.WriteText("二行目");
stream.WriteText("これも二行目");
stream.SaveToFile("C:\TEST.TXT");
stream.Close();
以上のように書くことで、UTF-8 を指定して、
テキストファイルを作成することができる。
基本は Open メソッドで準備し、
Type プロパティでテキスト入出力を指定し、
Charset プロパティで符号化方法を決める。
LineSeparator プロパティでは、改行文字を指定する。
後は WriteText メソッドで書き込んでいく。
第 2 引数に adWriteLine を指定すると、
指定した文字の後に、改行が追加で出力される。
SaveToFile メソッドを呼び出すと、
Stream に書き込まれた全ての内容をファイルに書き出す。
これを実行すると、C ドライブに TEST.TXT が作成される。
文字コードは UTF-8 で書き込まれているはずだ。