2014/11/08

[wsh]JScriptはShift-JIS + CR/LFっぽい

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 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。