VBS:读写UTF-8格式的文件

2023-1-17 9:52:44 [大杂烩]

Vbs(ASP)中,Scripting.FileSystemObject 对象可以读写 ANSI格式和UNICODE格式的文件,对于WEB中常用的UTF-8不支持。要读写UTF-8格式的文件,需使用ADODB.Stream对象。

下面两个函数分别是使用ADODB.Stream读取文件和写入文件,支持GB2312和utf-8。

读取UTF-8时,支持utf-8和utf-8 BOM。ADODB.Stream文本写入UTF-8时为BOM格式,开头会自动添加 三字节 EFBBBF。如果要去掉BOM,则要作一番处理,方法是将BOM头去掉,以二进制的方式写文件。


Function getFromFile(fn,charset)

Dim objStream
Set objStream = CreateObject("ADODB.Stream")
objStream.Type = 2 '文本 1 二进制
objStream.charset=charset '"GB2312" 'UTF-8
objStream.Open
objStream.loadfromfile fn
getFromFile =objStream.readtext
End Function


Function saveToFile(fn,str,charset)

'可生成UTF-8格式的文件 charset=GB2312 、UTF-8、 UTF-8BOM
Dim objStream,newStream
Dim bom
If UCase(charset)="UTF-8BOM" Then
charset="UTF-8"
bom=True
Else
bom=False
End if
Set objStream = CreateObject("ADODB.Stream")
objStream.Type = 2 '文本 1 二进制
objStream.Mode = 3 '读写
objStream.charset=charset
objStream.Open
objStream.writetext Str
If bom Then
objStream.saveToFile fn,2
Else
objStream.Position = 3  
Set newStream = CreateObject("adodb.stream")  
With newStream  
.Mode = 3  
.Type = 1 '二进制 
.Open()  
End With
objStream.CopyTo(newStream)
newStream.SaveToFile fn,2
newStream.close
End If
objStream.close
End Function