【问题标题】:Why WScript.StdOut.Write method behaves differently in VBS vs. JScript?为什么 WScript.StdOut.Write 方法在 VBS 和 JScript 中的行为不同?
【发布时间】:2013-01-16 00:24:25
【问题描述】:

我有两个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

安东尼奥

【问题讨论】:

  • 有趣,然后重定向到文件,两个 vbs/js 打印 128 字节并在此处失败并出现相同的错误。为这个问题 +1。

标签: vbscript jscript wsh windows-scripting


【解决方案1】:

首先,

你的代码逻辑不一样。

VBScript.vbs 的计数从 ZERO(0) 开始,而 JScript.js 的计数从 ONE(1) 开始。

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

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

秒,

你使用的功能不一样 因为它们都返回不同的结果 在每个字符的上下文中。

Chr() 函数返回 ASCII 字符,

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我明白你的意思。不过,我对相反的问题很感兴趣,那就是:如何直接在JScript中生成Ascii字符?我已经解决了这个问题,已经调整了生成的代码,其中每个字符的变量超过 127...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 2016-06-02
    • 2016-12-14
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    相关资源
    最近更新 更多