解决VBScript中文乱码问题

来源:互联网 发布:淘宝卖家运费怎么算 编辑:程序博客网 时间:2024/05/12 12:07
相信很多人在用FSO读取或写入中文文本文件时都会遇到让人头疼的乱码问题吧,确实,FSO不支持UTF-8的。所以干脆用AdoDb.Stream来处理。
 

问题描述:从一个文本中读取中文,然后输出到另外一个文本中。每次读取出中文后都是乱码。

解决方法:

1.本想使用OpenTextFile来解决乱码问题的,但是最终以失败告终,OpenTextFile只能提供unicode和ascill字符集的转换,无法解决中文问题。

2.中文字符集需要utf-8、gb2312、gbk和gbk18030等字符集来支持,所以首先将中文读取出来转换成utf-8字符集。

3.使用Adobe.Stream来帮助我们实现字符集的转换。例如:

Dim FileUrl

FileUrl = "C:\Documents and Settings\caiwl\桌面\QTP\Etoh201003301237\Control.xml"

MsgBox ReadFile(FileUrl, "utf-8")
Call WriteToFile(FileUrl, ReadFile(FileUrl, "utf-8"), "utf-8")

'-------------------------------------------------
'函数名称:ReadFile
'作用:利用AdoDb.Stream对象来读取各种格式的文本文件
'----------------------------------------------------
Function ReadFile(FileUrl, CharSet)
    Dim Str
    Set stm = CreateObject("Adodb.Stream")
    stm.Type = 2
    stm.mode = 3
    stm.charset = CharSet
    stm.Open
    stm.loadfromfile FileUrl
    Str = stm.readtext
    stm.Close
    Set stm = Nothing
    ReadFile = Str
End Function

'-------------------------------------------------
'函数名称:WriteToFile
'作用:利用AdoDb.Stream对象来写入各种格式的文本文件
'参数:FileUrl-文件相对路径;Str-文件内容;CharSet-编码格式(utf-8,gb2312.....)
'----------------------------------------------------
Function WriteToFile (FileUrl, Str, CharSet)
    Set stm = CreateObject("Adodb.Stream")
    stm.Type = 2
    stm.mode = 3
    stm.charset = CharSet
    stm.Open
    stm.WriteText Str
    stm.SaveToFile FileUrl, 2
    stm.flush
    stm.Close
    Set stm = Nothing
End Function


这下就不会有乱码了,但稍微不足之处是AdoDb.Stream没有Readline,至于怎么处理,大家根据自己的情况来决定吧。
0 0