你这个ConvertUtf8ToGBK函数测试过吗?

解决方案 »

  1.   

    void ConvertUtf8ToGBK(CString& strUtf8)UNICODE下,CString == CStringW
    这里你的参数应该是CStringA类型
      

  2.   

    CString相当于TCHAR,就是在UNICODE工程的时候是CStringW,在多字节字符串的时候是CStringA。
      

  3.   


    CStringW UTF8_To_UTF16(const char *source)
    {
    CStringW dest;
    DWORD len = MultiByteToWideChar(CP_UTF8, NULL, source, -1, NULL, NULL);
    MultiByteToWideChar(CP_UTF8, NULL, source, -1, dest.GetBuffer(len), len);
    dest.ReleaseBuffer();
    return dest;
    }BOOL WINAPI CWininetHook::_InternetReadFile(HINTERNET hFile,LPVOID lpBuffer,DWORD dwNumberOfBytesToRead,LPDWORD lpdwNumberOfBytesRead )
    {  
    BOOL isBool=s_pfnInternetReadFile(hFile,lpBuffer,dwNumberOfBytesToRead,lpdwNumberOfBytesRead ); 
    MessageBox(NULL, UTF8_To_UTF16(static_cast<const char*>(lpBuffer)), L"", MB_OK);
    return isBool;
    }
    UNICODE模式下就不要把utf8转换为gbk了,直接把utf8转换成utf16显示就行了
      

  4.   

    之前不是在UNICODE下用过 没问题,后来在UNICODE下修改了一下,就是把MultiByteToWideChar第3个参数转换了一下 其他的没改
      

  5.   

    英文都乱码应该不是转码问题了,在Hook函数里多加一些判断,比如当前的HTTP响应的内容,是不是一个html,如果是html才能进行转码,如果是一个jpg/gif等就不行的,另外由于是hook来的HTTP响应,得先确认内容有没有用gzip压缩,没有压缩的内容才能直接转码,因为浏览器发送HTTP请求的时候默认是Accept-Encoding:gzip允许接受gzip压缩内容的。