Aac*_*ini 6 vbscript wsh windows-scripting jscript
我在VBS和JScript中有两个小程序:
VBScript.vbs:
For i=0 To 255
WScript.StdOut.Write Chr(i)
Next
Run Code Online (Sandbox Code Playgroud)
JScript.js:
for ( var i=0; i <= 255; ++i )
WScript.StdOut.Write(String.fromCharCode(i));
Run Code Online (Sandbox Code Playgroud)
当我在命令提示符中执行它们时,它们显示不同的结果:
C:>cscript /nologo VBScript.vbs
?????
??????¶§?????????? !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]
^_`abcdefghijklmnopqrstuvwxyz{|}~???'ƒ".??^%S<O?Z??''""--~Ts>o?zY ¡¢£¤¥¦§¨©ª«¬®
¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþ
ÿ
C:>cscript /nologo JScript.js
?????
??????¶§?????????? !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]
^_`abcdefghijklmnopqrstuvwxyz{|}~????????????????????????????????? ¡¢£¤¥¦§¨©ª«¬
®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüý
þÿ
Run Code Online (Sandbox Code Playgroud)
可以解释之前的输出,因为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
Run Code Online (Sandbox Code Playgroud)
在这种情况下,两个程序在相同的条件下使用相同的 WSH方法,所以我不明白为什么VBS正确生成256个字符的文件,但JScript发出错误并只生成前128个字符.
这里发生了什么?有没有办法在JScript中正确生成具有256个不同字符的相同文件?TIA
安东尼奥
小智 6
第一,
你的代码的逻辑是不一样的.
您计数VBScript.vbs开始于ZERO(0)当你的JScript.js始于ONE(1).
更改JScript中的增量运算符以使它们相同:
for ( var i=0; i <= 255; i++ )
WScript.StdOut.Write(String.fromCharCode(i));
Run Code Online (Sandbox Code Playgroud)
第二,
您使用的函数不同,因为它们都会在每个字符上下文中返回不同的结果.
该Chr()函数返回ASCII字符,
而该fromCharCode()函数返回的Unicode字符可能每个字符有1到4个字节.
因此,ÅASCII集中的Å字符与Unicode集中的字符不同.
| 归档时间: |
|
| 查看次数: |
4932 次 |
| 最近记录: |