应该是gzip压缩问题,你自己调用WinInet发起HTTP请求头时,请求头里没有加Accept-Encoding: gzip,于是Web服务器返回的HTML即是不压缩的,所以能正常转码。而IE发起的请求默认请求头里都加了Accept-Encoding: gzip(你可以在Hook函数中调用HttpQueryInfo看看请求头是什么样的,有没有Accept-Encoding: gzip),于是Web服务器返回的数据是压缩过的,直接对压缩过的数据进行UTF8转码当然不行,得先解压数据,才能进行UTF8转码。解决办法是:1.Hook IE发起HTTP请求的相关函数,InternetOpenUrl?HttpOpenRequest ?在IE发起请求前,把请求头中的Accept-Encoding: gzip去掉。2.设置一下IE,让IE禁用Accept-Encoding: gzip(不过我看了下IE设置,好像没有这种设置)3.接受到数据后自行解压,使用第三方开源库比如zlib。
另外在HOOK函数中用HttpQueryInfo检查一下当前请求的相关信息,请求头、响应头,看看是不是对HTML的请求,而不是jpg/gif等。
另外你的Hook函数中,得先调用真实的InternetReadFile,才能读取lpBuffer的内容。