xmlhttp,adodb.stream 结合整理 ——代码转换效率问题

来源:互联网 发布:全民突击挂机软件 编辑:程序博客网 时间:2024/05/10 07:09

xmlhttp,adodb.stream 结合整理
                                                                                                        ——代码转换效率问题

说明:xmlHttp组件的详细参考文档可以在我的另一篇文章中找到,也可以登录到我
            个人的blog网站查看(
http://blog.7xile.com/xmlhttp/xmlhttprequest.html)


各种小偷程序及数据采集程序都有可能会用到代码的转换以实现中文的正常输出。
无非是利用xmlhttp的open,send方法结合responsebody属性获得目标网站的页面
数据内容,再通过相应的转换,把获取的内容加以显示或保存。
网站大多程序用如下方法实现编码的转换:
function bytes2bstr(bin)
 strreturn = ""
 
 for i = 1 to lenb(bin)
  thischarcode = ascb(midb(bin,i,1))
  if thischarcode < &h80 then
   strreturn = strreturn & chr(thischarcode)
  else
   nextcharcode = ascb(midb(bin,i+1,1))
   strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
   i = i + 1
  end if
 next
 
 bytes2bstr = strreturn
end function

 Private Function Bin2Str(Bin)
  Dim I, Str
  For I=1 to LenB(Bin)
   clow=MidB(Bin,I,1)
   if ASCB(clow)<128 then
    Str = Str & Chr(ASCB(clow))
   else
    I=I+1
    if I <= LenB(Bin) then Str = Str & Chr(ASCW(MidB(Bin,I,1)&clow))
   end if
  Next
  Bin2Str = Str
 End Function

上面两个函数就是逐字节的检查二进制的内容,以判定是中文字符或是英文字符。如果是英文字符就原样输出。如果是
中文字符,就经过相应的字符转换输出。
其中都用到了lenB这个函数,可见循环要经过LenB(目标二进制数据)次循环才能完成转换。如果我们获取的是一个复杂
页面,呵呵,那不可想象要经过多少次运算。效率可想而知。我通过上两种方法分别转换了http://www.sohu.com/ 和
http://www.baidu.com/这两个站的首页。转换百度的,速度挺快的。我也监视了CPU的占用率,基本没有明显变化。但
转换搜狐的页面时,CPU的占用率也一直没有明显变化,但是一直停留在占用率100%的状态,直到转换完成。当然,如果
你不在程序中设定server.scripttimeout的值够大的话,很快就会报页面超时的问题。我跟踪了两者的时间,但机器不同,
页面执行时间肯定不同。我就不说具体数字了。我想CPU的占用率100%,是没有人喜欢的。
那有没有办法解决呢?当然,但不一定是最好的办法,因为本人水平有限,不敢说能写出什么好的方法。但下面的一种方法,
不会出现CPU的占用率100%的情况,整个过程中,看不出CPU的占用率有明显变化。我也跟踪了页面执行时间,比上面的方法快上10
倍以上。具体转换函数如下:
Function asobin2Str(bin)
 Dim aso:set aso = server.CreateObject("adodb.stream")
  with aso
   .type = 1
   .mode = 3
   .open
   .write bin
   .position = 0
   .type =2
   .charset = "GB2312"
  end with
  asobin2Str = aso.readtext()
  aso.close
  set aso = nothing
End Function
这个方法运用了adodb.stream对象,该对样的具体资料会近期给出说明。网上传了太多的adodb.stream的使用说明,但如出
一辄,没有很好的说明,初学者看了之后,还是一头雾水,请留意我的栏目,我在整理中。
当然,如果本文所说的问题你有更好的解决方法,请也和大家一起分享!!!