Windows上でJavaScriptを動かすときは、どうやらJScriptと呼ぶらしい。
JavaScriptともちょっと違った書き方ができるというか、何かルールがあるようだ。
ファイルを読んで、置換して、別ファイルに書き込む、というものを書いてみた。
var inFile = "test.html";var outFile = inFile + ".html";//読込み
var inStream = new ActiveXObject("ADODB.Stream");inStream.Type = 2; //text
inStream.charset = "utf-8";
inStream.Open();inStream.LoadFromFile(inFile);var inText = inStream.ReadText(-1); /* -1:全部 -2:1行ごと */inStream.Close();//置換
inText = inText.replace(/<value1>/g, "-1");
inText = inText.replace(/<value2>/g, "abc");
inText = inText.replace(/もういやだ/g, "");WScript.Echo(inText);//console.log(inText);
//書き込み
var outStream = new ActiveXObject("ADODB.Stream");outStream.Type = 2;outStream.charset = "utf-8";
outStream.Open();outStream.WriteText(inText, 1); /* 0:改行無し 1:改行有り */
outStream.SaveToFile(outFile, 2); /* 1:なければ新規作成 2:新規作成かつ存在すれば上書き */
outStream.Close();
読み込むファイルは、これ。
<!DOCTYPE html><html lang="ja"><head><meta charset="utf-8" /><title>Hello</title></head><body><script language="JavaScript">var foo = <value1>;document.write("寒い<value2>。");もういやだ</script>Hello World!</body></html>
<value1>に「-1」を、<value2>に「abc」を、「もういやだ」を空行にしたい。
「もういやだ」は行ごと削除したいけど、まあHTMLだからいいだろう。
これを実行したのだが・・・。
結果がこれ。
<!DOCTYPE html><html lang="ja"><head><meta charset="utf-8" /><title>Hello</title></head><body><script language="JavaScript">var foo = <value1>;document.write("寒いabc。");もういやだ</script>Hello World!</body></html>
中途半端に<value2>だけ置換されている。
よくわからんので、jsの方で<value1>と<value2>の順番を入れ替えた。
そうすると、<value1>が置換された。
ここら辺で、Windowsだから、ということに気付いた。
文字だけではわからないところだが、HTMLファイルはUTF-8/LF、JSファイルもUTF-8/LFで保存している。
やっぱりCR/LFじゃないとわからないってことか?ということで、JSファイルをUTF-8/CRLFにした。
<!DOCTYPE html><html lang="ja"><head><meta charset="utf-8" /><title>Hello</title></head><body><script language="JavaScript">var foo = -1;document.write("寒いabc。");もういやだ</script>Hello World!</body></html>
<value1>と<value2>は置換された。
そして日本語が残った。。。
ということは、Shift-JISじゃないとだめなのか?ということで、JSファイルをShift-JIS/CRLFで保存。
<!DOCTYPE html><html lang="ja"><head><meta charset="utf-8" /><title>Hello</title></head><body><script language="JavaScript">var foo = -1;document.write("寒いabc。");</script>Hello World!</body></html>
はー、そういうことなんですな。
結論としては、こう。
WindowsのJScriptは、Shift-JIS + CR/LFで保存しよう
ちなみに、このJSをそのまま動かすと、出力したファイルの最後にCR/LFの改行が入る。
「ちっ」と思っていたが、WriteText()で改行有りにしていたからだった・・・。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。