问题描述:从一个文本中读取中文,然后输出到另外一个文本中。每次读取出中文后都是乱码。
解决方法:
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,至于怎么处理,大家根据自己的情况来决定吧。