- 注册时间
- 2011-3-21
- 最后登录
- 2022-3-22
- 在线时间
- 1191 小时
- 阅读权限
- 200
- 积分
- 9457
- 帖子
- 1256
- 精华
- 0
- UID
- 1
|
Asc, AscB, AscW 这三个函数大家都见过,但有什么区别呢。。
扯一扯吧, 首先是 Asc, Asc 是按本地字符集取文字的编码数值- SetLocale "zh-CN"
- MsgBox Asc("轻") ' -14367
复制代码 为什么是负数呢,呵呵,其实在 GBK 集中,“轻”字对印的编码是二个字节: C7 E1
即是二进制的:11000111 11100001
因为首位是1, 被当成有符号数了,
那怎么才能取得无符号数的值呢,嘿嘿,加上65536便成。
所以一般呢取得字符的本地编码值,可以这么样 (Asc("盟") + 65536) Mod 65536
再来看一下- SetLocale "zh-TW"
- MsgBox Asc("轻") ' 63
复制代码 咦,怎么是 63, 63 是ascii 字符中的 "?" 问号啊,为什么呢。。。。
呵呵,因为 SetLocale "zh-TW" 之后,使用的是台湾地区的字符集,对应的是 Big5 码
台湾地区使用的是繁体字,有木有 有木有
繁体字里头可没有 "轻" 这个字符哦。。。。 所以搞了个 "?" 来
要不知道的话,可真悲催了。。伤不起啊,伤不起....- SetLocale "zh-TW"
- MsgBox Asc("輕") ' -17484
复制代码 这下行了吧。嘿嘿
再来看一下 AscB, AscB 也可以取得 Ascii 字符的编码值,但是对于多字节字符,只取得第一个字节的值- MsgBox AscB("轻") ' 123, 对吧 “轻”的Unicode编码是 8F 7B 两个字节,而 7B 转换成十进制就是 123
- MsgBox AscB(MidB("轻", 2, 1)) ' 143, 对吧 “轻”的Unicode编码是 8F 7B 两个字节,而 8f 转换成十进制就是 143
复制代码 为什么是 Unicode 编码的呢。。。。呵呵, VBScript 运行时,字符在内存中都是 Unicode 表示的
那又为什么
AscB("轻") 是 7B
AscB(MidB("轻", 2, 1)) 反而是 8F 呢。。。。
因为运行时,一个字符在内存中的 Unicode 表示,有的是高位在前,有的是低位在前,这个是平台决定的
为什么会有的是高位在前,有的是低位在前。。。。 我也不知道。。。
够悲催的了,我们别再纠结了。。。
还有就是 AscW, AscW 取得字符的 Unicode 编码- MsgBox AscW("轻") ' -28805
- MsgBox Hex(AscW("轻")) ' 8F7B ' 不用再说了吧... 哈哈
复制代码 |
|