VBS的fso:Scripting.FileSystemObject不⽀持UTF-8编码的⽂
本⽂件
⼤家都知道 VBS 中 fso 读⽂件的⽤法 :
Set fso=CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(yjjsfn) '--fso不⽀持utf-8格式,故⽤Adodb.Stream代替之见ReadFile
s = f.ReadAll
f.Close
set f = nothing
set fso = nothing
今天⽤ fso 读个简单的⽂本⽂件,其中⽆中⽂,全为字母和数字,但是奇怪的是,读出的内容头部总是有⼏个乱码⽂字,试了⼏次⽆果,怀疑是编码问题导致的,因为之前读 GB2312 的⽂本⽂件⼀直是正常的。
回想了⼀下,貌似 VB6 的时候就是⽆法直接读写处理  UTF-8 编码格式的⽂本⽂件,看来 VBS 是继承了这个传统。
于是查到⽤ Adodb.Stream 读取⽂本⽂件时可以指定编码,顺便附上写⽂件的正确函数,
注意 Stream 要执⾏了 .Open 操作后再设置编码格式,否则⽆⽤!,
以下代码已在正常使⽤,同时抱怨下哪些未经测试就乱发出来的转载代码,不知道调试很浪费⽣命吗?!
public function saveFile(data,recfilen,CodePage)
dim fxt,txt
set Astream=CreateObject("Adodb.Stream")'asp Server.CreateObject("Adodb.Stream")
fxt=mid(recfilen,InStrRev(recfilen,".")+1)
txt=false
if fxt="asp" or fxt="xml" or fxt="aspx" or fxt="php" or fxt="txt" or fxt="jsp" or fxt="htm" or fxt="html" or f
xt="js" then        txt=true
end if
if txt then
else
end if
Astream.Mode = 3'    adModeRead =1
'  adModeReadWrite =3
'  adModeRecursive =4194304
'  adModeShareDenyNone =16
'  adModeShareDenyRead =4
'  adModeShareDenyWrite =8
'  adModeShareExclusive =12
'  adModeUnknown =0
'  adModeWrite =2
Astream.open
'Astream.CharSet = "GB2312"
'Astream.LoadFromFile(recfilen) '装载⽂件
'Assp=Astream.size
Astream.Position =0 '装载⽂件时设置为Assp
'Astream.Writetext tmpstr00,1
if txt then
'data=BytesToStr(data)
Astream.CharSet =CodePage '  "GB2312"
Astream.Writetext data,1
'Astream.CharSet = "GB2312"
else
Astream.Write data
end if
'msgbox recfilen
Astream.SaveToFile recfilen,2
' "F:\temp\a.jpg",2
Astream.close
set Astream=Nothing
end function
public Function ReadFile(FileUrl, CharSet)
Dim Str
Set stm = CreateObject("Adodb.Stream")
stm.Type = 2
stm.Open
stm.charset = CharSet
stm.loadfromfile FileUrl
Str = adtext
stm.Close
url编码和utf8区别Set stm = Nothing
ReadFile = Str
End Function

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。