用 VBScript 与 JavaScript 配合获取和处理汉字的字符编码

VBScript JavaScript 作为网页的客户端脚本,各有优劣。比如,VBS 可以取得汉字的字节码,但要取汉字的 Unicode 码就比较困难,而 JS 则正好相反,取汉字的 Unicode 码非常容易,取其字节码却非常困难。另外,在作为网页脚本的时候,VBS 可以通过 MsgBox 显示消息,通过 InputBox 获取输入;JS 也类似的提供了 alert() 方法和 prompt() 方法,除此之外,还提供了 confirm() 方法获取用户的确认信息,这一点 VBS 就不如 JS了。不过,作为 Windows 脚本的时候,JS 的这三个方法都不能使用,因为它们是浏览器内置对象 window 提供的,在 Windows 脚本中不存在这个内置对象。

 

  言归正传,现在说说为什么要用 VBS JS 配合来处理汉字的字符编码。

 

  问题由来:写一些链接地址的时候,因为 URL 中包括特殊字符或者汉字,需要编码。本来这可以用 JS escape() 方法来完成,但是 JS 的这个方法在处理内码大于 255 的字符时,使用的是 Unicode 编码,如 %uXXXX 格式。虽然大部分浏览器可以识别这种编码格式的 URL,但有少部分,比如 Foxmail,却不能识别。它们只能识别 %XX%XX 这样的编码——这是将双字节字符拆分成两个字节进行的编码,使用的是字节码。因为,用 VBS 就能很容易的把汉字的字节码取出来进行处理,只需要使用 Asc Hex 两个函数就行了,如

 

<script language="vbscript">

Function GetByteCode(ch)    ' 假设传入 ""

    code = Asc(ch)          ' -20001

    GetByteCode = Hex(code) ' "B1DF"

End Function

</script>

 

  本来,直接使用 VBS 就可以完成处理工作,但为什么要用 JS 呢?原因有两个:1. 为了进行编码需要将一个字符串中的每个字符取出来传入 GetByteCode 函数,如果用 VBS 取的话,需要在一个循环里使用 N Mid 函数,但在 JS 里只是使用字符串的 charAt() 方法,明显后者比前者有更高的效率。同理,在很多方面 JS 都优于 VBS,所以经常程序员会把 JS 定为主要脚本语言,而用 VBS 处理一些 JS 不容易处理的事情作为辅助。2. 笔者更喜欢 JS 一些 :P

 

  所以,下面是用 JS 完成的 URL 编码的主程序:

 

<script language="javascript">

String.prototype.urlEncode = function() {

    var r = "";

    for (var i = 0; i < this.length; i++) {

        var code = "" + GetByteCode(this.charAt(i));

        if (code.length > 2) {

            var b1 = code.substr(0, code.length - 2);

            var b2 = code.substr(code.length - 2);

            if (i == 0) {

                alert("" + code + ", " + b1 + ", " + code.length + ", " + b2);

            }

            r += "%" + b1 + "%" + b2;

        } else {

            r += "%" + code;

        }

    }

    return r;

}

</script>

 

  最后,写个简单的代码测试一下:

 

<p>

    <a href="javascript:alert('边城狂人'.urlEncode());">

        Hello, James Fancy

    </a>

</p>

 

  测试结果,边城狂人的 URL 编码为:

%B1%DF%B3%C7%BF%F1%C8%CB

后台处理程序要转换一下:

String province = new String( aiform.getProvince().getBytes( "8859_1" ) , "gb2312" );(就是这种形式,只是举个简单的例子)

文章来源:http://web.mblogger.cn/jamesfancy/posts/44163.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值