VBS 的 fso:"Scripting.FileSystemObject" 不支持 UTF-8 编码的文本文件

32 篇文章 2 订阅
20 篇文章 1 订阅

大家都知道 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 fxt="js" then
        txt=true
    end if
    if txt then
        Astream.type=2  '1 bin,2 txt
    else
        Astream.type=1  '1 bin,2 txt
    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.mode = 3 
    stm.Open
	stm.charset = CharSet
    stm.loadfromfile FileUrl 
    Str = stm.readtext 
    stm.Close 
    Set stm = Nothing 
    ReadFile = Str 
End Function

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jessezappy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值