标题: VBS文件编码与Unicode
作者: Demon
链接: https://demon.tw/programming/vbs-file-unicode.html
版权: 本博客的所有文章,都遵守“署名-非商业性使用-相同方式共享 2.5 中国大陆”协议条款。
在《VBS字符串的内部实现》中谈到了 VBS 字符串在内部是以 Unicode 的形式来保存的,然而在外部,VBS 脚本文件的编码却不一定是 Unicode,本文主要探讨一下 VBS 文件编码与 Unicode 的关系。
我们一般是用 ANSI 编码注①来保存我们的 VBS 脚本文件,但是 ANSI 编码并不兼容某些 Unicode 字符,比如版权符号“©” ,再比如某些中国古代的文字“𪚥”注②,这种时候就需要保存为 Unicode 编码了。
常用的 Unicode 编码方式有 Unicode Little Endian、Unicode Big Endian 和 UTF-8,而每种编码方式又可以分为带 BOM 和不带 BOM,那么 VBScript 解释引擎支持哪一种方式的 Unicode 编码呢?
于是我做了一个测试,以下面的代码为例
MsgBox "Copyright © 2011 Demon"
分别保存为 Unicode Little Endian、Unicode Big Endian 和 UTF-8,带 BOM 的和不带 BOM 的,测试结果如下:
Unicode Little Endian With BOM | Copyright © 2011 Demon |
Unicode Little Endian Without BOM | Copyright © 2011 Demon |
Unicode Big Endian With BOM | Error: Invalid character |
Unicode Big Endian Without BOM | Error: Invalid character |
UTF-8 With BOM | Error: Invalid character |
UTF-8 Without BOM | Copyright 漏 2011 Demon |
由结果可知,只能保存为 Unicode Little Endian 编码,带不带 BOM 都可以。
简单解释一下为什么保存为不带 BOM 的 UTF-8 会显示“Copyright 漏 2011 Demon”:不带 BOM 的话 VBScript 引擎会按照 ANSI 编码来解析 VBS 文件,“©”符号保存为 UTF-8 后是 C2A9,正好对于 ANSI 中的“漏”,所以就出现了上面的结果。
当然,你也可以使用 Windows 脚本文件(*.wsf)来支持 UTF-8 编码,或者在 ANSI 编码中使用 ChrW 函数来获取 Unicode 字符,我就不举例子了。
注①:准确的说 ANSI 并不是一种编码,ANSI 实际对应的编码跟系统设置的代码页有关,在简体中文系统中代码页默认是936,对应 GB2312 编码。在本文中 ANSI 代表 GB2312。
注②:笔划最多的汉字,由四个繁体龙字组成,你的系统不一定能显示这个字。
赞赏微信赞赏支付宝赞赏
随机文章:
放了300%,終於看清是四個”龍”字
話說我看的古文也不少了,真沒見過這個字。
呵呵,中国的文字博大精深。
[…] Demon's Blog » 程序设计 » OpenTextFile与Unicode « VBS文件编码与Unicode […]
请教Demon,我用vbs调用Microsoft.XMLDOM来操作xml文件:
Set doc = CreateObject(“Microsoft.XMLDOM”)
doc.load(“c:\a.xml”) ‘该xml是utf8编码
doc.save(“c:\a.xml”) ‘得到的新文件就变成ANSI了
请问如何得到utf8的xml文档,求帮助。