vbscript – 为什么WScript.StdOut.Write方法在VBS和JScript中的行为不同?

前端之家收集整理的这篇文章主要介绍了vbscript – 为什么WScript.StdOut.Write方法在VBS和JScript中的行为不同?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在VBS和JScript中有两个小程序

VBScript.vbs:

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

JScript.js:

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

当我在命令提示符中执行它们时,它们显示不同的结果:

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

可以解释之前的输出,因为JScript的fromCharCode方法与VBScript的Chr函数之间存在一些操作差异.但是,如果尝试将输出重定向到磁盘文件,结果会有很大不同:

  1. C:>cscript /nologo VBScript.vbs > VBScript.txt
  2.  
  3. C:>cscript /nologo JScript.js > JScript.txt
  4. C:\JScript.js(2,4) Microsoft JScript runtime error: Invalid procedure call or argument
  5.  
  6. C:>dir *.txt
  7.  
  8. 15/01/2013 05:48 p.m. 128 JScript.txt
  9. 15/01/2013 05:48 p.m. 256 VBScript.txt

在这种情况下,两个程序在相同的条件下使用相同的WSH方法,所以我不明白为什么VBS正确生成256个字符的文件,但JScript发出错误并只生成前128个字符.

这里发生了什么?有没有办法在JScript中正确生成具有256个不同字符的相同文件? TIA

安东尼奥

第一,

你的代码的逻辑是不一样的.

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

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

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

第二,

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

Chr()函数返回ASCII字符,

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

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

猜你在找的Windows相关文章