vbs实现unicode和ascii编码转换
一、copy a unicode file to an ansi file
witoansi.vbs文件:
' utility to rewrite a unicode text file as an ansi text file
' for use with windows scripting host, cscript.exe or wscript.exe
' copyright (c) 1999, microsoft corporation
'
option explicit
' filesystemobject.createtextfile and filesystemobject.opentextfile
const openasascii = 0
const openasunicode = -1
' filesystemobject.createtextfile
const overwriteifexist = -1
const failifexist = 0
' filesystemobject.opentextfile
const openasdefault = -2
const createifnotexist = -1
const failifnotexist = 0
const forreading = 1
const forwriting = 2
const forappending = 8
dim argcount:argcount = wscript.arguments.count
if argcount > 0 then if instr(1, wscript.arguments(0), "?", vbtextcompare) > 0 then argcount = 0
if (argcount = 0) then
wscript.echo "utility to copy unicode text file to an ansi text file." &_
vbnewline & "the 1st argument is the unicode text file to read" &_
vbnewline & "the 2nd argument is the ansi text file to write" &_
vbnewline & "if the 2nd argument is omitted, the unicode file will be replaced"
wscript.quit 1
end if
dim infile, outfile, instream, outstream, inline, filesys, wshshell
if argcount > 1 then
outfile = wscript.arguments(1)
infile = wscript.arguments(0)
else
outfile = wscript.arguments(0)
infile = outfile & ".tmp"
set wshshell = wscript.createobject("wscript.shell")
wshshell.run "cmd.exe /c copy " & outfile & " " & infile, 0, true
end if
set filesys = createobject("scripting.filesystemobject")
set instream = filesys.opentextfile(infile, forreading, failifnotexist, openasdefault)
set outstream = filesys.createtextfile(outfile, overwriteifexist, openasascii)
do
inline = instream.readline
outstream.writeline inline
loop until instream.atendofstream
instream.close
outstream.close
if argcount = 1 then wshshell.run "cmd.exe /c del " & infile, 0
批处理中调用:
cscript witoansi.vbs [path to unicode file][path to ansi file]
二、copy a ansi file to an unicode file
只需对opentextfile和createtextfile的打开方式做调整即可。
三、参考
http://msdn.microsoft.com/en-us/library/aa368046%28vs.85%29.aspx
四、opentextfile和createtextfile的使用
createtextfile 方法
创建指定文件并返回 textstream 对象,该对象可用于读或写创建的文件。
object.createtextfile(filename[, overwrite[, unicode]])
参数
object
必选项。应为 filesystemobject 或 folder 对象的名称。
filename
必选项。字符串表达式,指明要创建的文件。
overwrite
可选项。boolean 值指明是否可以覆盖现有文件。如果可覆盖文件,该值为 true;如果不能覆盖文件,则该值为 false 。如果省略该值,则不能覆盖现有文件。
unicode
可选项。boolean 值指明是否以 unicode 或 ascii 文件格式创建文件。如果以 unicode 文件格式创建文件,则该值为 true;如果以 ascii 文件格式创建文件,则该值为 false。如果省略此部分,则假定创建 ascii 文件。
opentextfile 方法
打开指定的文件并返回一个 textstream 对象,可以读取、写入此对象或将其追加到文件。
object.opentextfile(filename[, iomode[, create[, format]]])
参数
object
必选项。应为 filesystemobject 对象的名称。
filename
必选项。字符串表达式,指明要打开的文件名称。
iomode
可选项。输入/输出模式,是下列三个常数之一:forreading,forwriting,或 forappending。
create
可选项。boolean 值,指出当指定的 filename 不存在时是否能够创建新文件。允许创建新文件时为 true,否则为 false。默认值为 false。
format
可选项。三个 tristate 值之一,指出以何种格式打开文件。若忽略此参数,则文件以 ascii 格式打开。
设置
iomode 参数可为下列设置之一:
数 | 值 | 描述 |
---|---|---|
forreading | 1 | 以只读模式打开文件。不能对此文件进行写操作。 |
forwriting | 2 | 以只写方式打开文件。不能对此文件进行读操作。 |
forappending | 8 | 打开文件并在文件末尾进行写操作。 |
format 参数可为下列设置之一:
常数 | 值 | 描述 |
---|---|---|
tristateusedefault | -2 | 以系统默认格式打开文件。 |
tristatetrue | -1 | 以 unicode 格式打开文件。 |
tristatefalse | 0 | 以 ascii 格式打开文件。 |