“添加UFT-8文件头并转换成ANSI编码”,无需添加BOM照样转换

set fso = CreateObject("Scripting.FileSystemObject")

'Files属性获取文件集合时,与CMD下的for遍历文件有相同的Bug:
'如果文件名有变动,可能会重复或多次遍历
'看来是某个API的Bug
'所以先获取文件列表再使用保险一点

FileList = ""
for each oFile in fso.GetFolder(".").Files
    if LCase(fso.GetExtensionName(oFile.Path)) = LCase("txt") then
        FileList = FileList & oFile.Path & vbCrLf
    end if
next

Files = Split(FileList, vbCrLf)
for i=0 to UBound(Files)-1 '最后一个元素是空的
    'U8ToU8Bom Files(i) '如果要生成一个有BOM的文件,启用此行
    U8ToAnsi Files(i)
next

function U8ToU8Bom(strFile)
    dim ADOStrm
    Set ADOStrm = CreateObject("ADODB.Stream")
    ADOStrm.Type = 2
    ADOStrm.Mode = 3
    ADOStrm.CharSet = "utf-8"
    ADOStrm.Open
    ADOStrm.LoadFromFile strFile
    ADOStrm.SaveToFile strFile & ".u8.txt", 2
    ADOStrm.Close
    Set ADOStrm = Nothing
end function

function U8ToAnsi(strFile)
    dim ADOStrm
    dim s
    Set ADOStrm = CreateObject("ADODB.Stream")
    ADOStrm.Type = 2
    ADOStrm.Mode = 3
    ADOStrm.CharSet = "utf-8"
    ADOStrm.Open
    ADOStrm.LoadFromFile strFile
    s = ADOStrm.ReadText
    ADOStrm.Position = 0
    ADOStrm.CharSet = "gbk"
    ADOStrm.WriteText s
    ADOStrm.SetEOS
    ADOStrm.SaveToFile strFile & ".ansi.txt", 2
    ADOStrm.Close
    Set ADOStrm = Nothing
end function

原文地址:http://www.bathome.net/thread-8299-1-1.html



posted @ 2012-09-01 12:09  lenya  阅读(324)  评论(0编辑  收藏  举报