对于sina是可以的, 同样的代码对于sohu存成文件后是乱码。找了个WebSpider程序,也是如此.
用了字节转换的函数, 看参考工程是也是同样的用法.
MultiByteToWideChar
WideCharToMultiByte
BOOL ConvertUTF8ToANSI(char* strUTF8, DWORD dwstrUTF8Len, CString &strANSI) { int sourceCodepage = CP_UTF8;//936;//CP_UTF8; int targetCodepage = CP_ACP;//CP_ACP; CString str; int len = dwstrUTF8Len; str.LockBuffer(); LPTSTR pcBuf = str.GetBufferSetLength(len + 1); memcpy(pcBuf, strUTF8, dwstrUTF8Len); *(pcBuf + dwstrUTF8Len) = '/0'; str.UnlockBuffer(); int unicodeLen = MultiByteToWideChar(sourceCodepage,0,str,-1,NULL,0); //unicodeLen这个长度就不对了, 几十K的长度变成了0, 或3, 4 //sohu的url不知道有什么区别啊? //sina的url就是实际需要转换后的长度.
正在想办法解决.
WebSpider的资料
http://baike.baidu.com/view/284853.htm
乱码的原因找到了, 从sohu下载的数据是压缩过的.
Content-Encoding gzip
访问带授权的网页
http://support.microsoft.com/kb/195650
问题已经解决
1. 分析html头信息, 得到HTTP_QUERY_CONTENT_ENCODING类型, http://download.csdn.net/source/2889246
2. 如果HTTP_QUERY_CONTENT_ENCODING类型是gzip, 解压缩, http://download.csdn.net/source/2889842
3. 如果HTTP_QUERY_CONTENT_TYPE类型是utf-8, 进行utf-8到gb2312转换. 用(MultiByteToWideChar, WideCharToMultiByte.
处理后,htm流l就是可以在本地处理的普通文本流.