博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VBS字符编码的说明
阅读量:6327 次
发布时间:2019-06-22

本文共 785 字,大约阅读时间需要 2 分钟。

MSDN文档对AscW的说明是:AscW是为使用Unicode字符的32位平台提供的。它返回Unicode(宽型)字符代码,因此可以避免从ANSI到Unicode的代码转换。

按照参考手册的定义,AscW函数应该返回一个字符的Unicode字符编码,但是直接拿返回的结果来用的话会有潜在的BUG,正如我碰到的。

“魔”字的Unicode编码是39764,测试如下代码

c = AscW("魔")If c > 127 Then	WScript.Echo "Not ASCII"Else	WScript.Echo "ASCII"End If

你认为返回的结果是什么?"Not ASCII"?错!返回的结果是"ASCII"。

这就是潜在的BUG,对某些中文(当然还有其他字符)AscW函数返回的值是负数!如果你的代码拿这个值与一个正数比较大小,逻辑值将是False!

为什么呢?因为AscW的返回值的子类型是Integer,而VBS中Integer的取值范围是从-32768到32767。39764 > 32767,造成了溢出,所以返回负数。

怎样才能得到正确的结果呢?答案把子类型是转化成Long,Long的取值范围是-2,147,483,648到2,147,483,647,不会造成溢出。

WScript.Echo CLng("&H" & Hex(AscW("魔")))

先用Hex函数把AscW的返回值转化成十六进制的字符串,加上VBS中十六进制前缀&H,最后用CLng函数把子类型转化成Long。这样就能得到39764这个正确的Unicode编码值了。


本文转自hcy's workbench博客园博客,原文链接:http://www.cnblogs.com/alterhu/archive/2012/04/08/2438133.html
,如需转载请自行联系原作者。
你可能感兴趣的文章
Android新建项目,或者导入项目出现R文件丢失,解决方案 .
查看>>
[Unity3D插件]2dToolKit系列三 碰撞检测功能的实现以及障碍物的随机摆放
查看>>
社交系统ThinkSNS 老用户感恩回馈活动
查看>>
公网秘钥
查看>>
UML常用的集中关系(转)
查看>>
OSPF状态机
查看>>
PDF转换器注册码(支持所有版本)
查看>>
Confluence 6 使用 CSS 样式化 Confluence 的介绍
查看>>
css多栏布局探讨1
查看>>
记一次地址库修改导致的连锁反应
查看>>
WebSocket的原理,以及和Http的关系
查看>>
6.1 压缩打包介绍 6.2 gzip压缩工具 6.3 bzip2压缩工具 6.4 xz压缩工具
查看>>
LAMP环境搭建(centos6.9+apache2.4+mysql5.7+php7.1)
查看>>
[Linux学习笔记] Linux常用命令 - 权限管理命令
查看>>
SpringBoot-Spring Data Jpa使用(一)
查看>>
CentOS5 MySQL优化
查看>>
在Codeigniter框架中使用NuSOAP
查看>>
java IO
查看>>
在Struts中用超链接提交表单
查看>>
android studio git 学习笔记
查看>>