51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2471|回复: 3
打印 上一主题 下一主题

[原创] Vbscript实现编码转化-加入了自动check当前编码的函数

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2009-4-16 01:16:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在QTP中用ExecuteFile语句加载vbs文件的时候,经常会报错,原因是vbs的编码类型不是ANSI, 其实只要vbs在QTP中编辑过, 它的编码格式就自动变成Unicode类型,不是这是不是QTP的一个bug.
以下的方法很好的解决了这个问题, 可以在QTP加载vbs之前,遍历所有的vbs文件,从而保证其格式正确.
注: ANSI就是GB2312.
Call ConvertCode("C:\Documents and Settings\Administrator\桌面\Test\JayYang_TestCodeConvert.vbs", "GB2312")
'-------------------------------------------------   
'Function Name:ConvertCode(FileUrl, TargetCode)   
'Description: Convert file to specified code format   
'Parameter:FileUrl-File path; TargetCode-Code format(utf-8,gb2312, unicode)
'----------------------------------------------------
Function ConvertCode(FileUrl, TargetCode)
Dim SourceCode
SourceCode = CheckCode(FileUrl)
If StrComp(SourceCode, TargetCode) <> 0 Then
Call WriteToFile(FileUrl, ReadFile(FileUrl, SourceCode), TargetCode)
End If
End Function

'-------------------------------------------------   
'Function Name:CheckCode(FileUrl)   
'Description: Check the code format of specified file   
'Parameter:FileUrl-File path
'----------------------------------------------------
Function CheckCode(FileUrl)
Dim slz
Set slz = CreateObject("Adodb.Stream")
slz.Type = 1
slz.Mode = 3
slz.Open
slz.Position = 0
slz.Loadfromfile FileUrl
Bin=slz.read(2)
If AscB(MidB(Bin,1,1))=&HEF and AscB(MidB(Bin,2,1))=&HBB Then
  Codes="UTF-8"
ElseIf AscB(MidB(Bin,1,1))=&HFF and AscB(MidB(Bin,2,1))=&HFE Then
  Codes="Unicode"
Else
  Codes="GB2312"
End if
slz.Close
Set slz = Nothing
  CheckCode = Codes
End Function
'-------------------------------------------------   
'Function Name:ReadFile(FileUrl, CharSet)   
'Description: User AdoDb.Stream object to read specified code format file   
'Parameter:FileUrl-File path;CharSet-Code format(utf-8,gb2312, unicode)   
'----------------------------------------------------
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
  
'-------------------------------------------------   
'Function Name:WriteToFile(FileUrl, Str, CharSet)   
'Description: User AdoDb.Stream object to write all kind of format file   
'Parameter:FileUrl-File path;Str-File content;CharSet-Code format(utf-8,gb2312, unicode)   
'----------------------------------------------------   
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
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2011-6-13 12:02:49 | 只看该作者
非常好哦!!!
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2011-6-13 12:04:32 | 只看该作者


我的这个文件 ,也是使用编码转换函数将文件编码转换成UTF-8,但是显示的仍然是乱码。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2011-6-15 14:44:28 | 只看该作者
好贴,沉了2年了,居然都被你挖出来……
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-15 03:08 , Processed in 0.068064 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表