6

我在 VBS 和 JScript 中有两个小程序:

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 个不同字符的相同文件?TIA

安东尼奥

4

2 回答 2

6

第一的,

你的代码逻辑不一样。

VBScript.vbsZERO(0)的计数开始于JScript.jsONE(1).

更改 JScript 中的增量运算符以使它们相同:

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

第二,

您使用的函数不一样,因为它们都在每个字符上下文中返回不同的结果。

Chr()函数返回 ASCII 字符,

而该fromCharCode()函数返回每个字符可能有 1 到 4 个字节的 Unicode 字符。

因此,ÅASCII 集中的Å字符与 Unicode 集中的字符不同。

于 2013-02-07T10:31:46.223 回答
0

关于@OpenTechnologist 所说的,您如何使用ChrW()而不是Chr()在VBScript 中,因为这将更接近fromCharCode() 的本质,即输出Unicode。

于 2013-04-13T09:08:16.260 回答