6

VBS と JScript で 2 つの小さなプログラムがあります。

VBScript.vbs:

For i=0 To 255
   WScript.StdOut.Write Chr(i)
Next

JScript.js:

for ( var i=0; i <= 255; ++i )
   WScript.StdOut.Write(String.fromCharCode(i));

コマンド プロンプトで実行すると、異なる結果が表示されます。

C:>cscript /nologo VBScript.vbs
 ☺☻♥♦♣
♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]
^_`abcdefghijklmnopqrstuvwxyz{|}~⌂??'ƒ".┼╬^%S<O?Z??''""--~Ts>o?zY ¡¢£¤¥¦§¨©ª«¬­®
¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþ
ÿ

C:>cscript /nologo JScript.js
 ☺☻♥♦♣
♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]
^_`abcdefghijklmnopqrstuvwxyz{|}~⌂???????????????????????????????? ¡¢£¤¥¦§¨©ª«¬­
®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüý
þÿ

JScript の fromCharCode メソッドと VBScript の Chr 関数の操作上の違いにより、以前の出力が説明される場合があります。ただし、出力をディスク ファイルにリダイレクトしようとすると、結果は大きく異なります。

C:>cscript /nologo VBScript.vbs > VBScript.txt

C:>cscript /nologo JScript.js > JScript.txt
C:\JScript.js(2, 4) Microsoft JScript runtime error: Invalid procedure call or argument

C:>dir *.txt

15/01/2013  05:48 p.m.               128 JScript.txt
15/01/2013  05:48 p.m.               256 VBScript.txt

この場合、両方のプログラムが同じ条件で同じWSH メソッドを使用するため、VBS が 256 文字のファイルを正しく生成する理由はわかりませんが、JScript はエラーを発行し、最初の 128 文字だけを生成します。

そこで何が起こるの?JScript で 256 の異なる文字を含む同じファイルを正しく生成する方法はありますか? ティア

アントニオ

4

2 に答える 2

6

最初、

コードのロジックは同じではありません。

VBScript.vbsのカウントはから始まりZERO(0)JScript.jsは から始まりますONE(1)

JScript のインクリメント演算子を変更して、それらを同じにします。

for ( var i=0; i <= 255; i++ )
    WScript.StdOut.Write(String.fromCharCode(i));

2番目、

使用した関数は同じではありません。どちらも文字ごとのコンテキストで異なる結果を返すためです。

Chr()関数は ASCII 文字を返します。

このfromCharCode()関数は、1 文字あたり 1 ~ 4 バイトの Unicode 文字を返します。

したがって、 ASCII セットの文字は Unicode セットÅの文字とは異なります。Å

于 2013-02-07T10:31:46.223 に答える
0

@OpenTechnologist の発言については、VBScriptChrW()の代わりに使用Chr()することで fromCharCode() の本質、つまり Unicode の出力に近づくのではないでしょうか。

于 2013-04-13T09:08:16.260 に答える