sohu网页内容,下载后乱码的转换.

对于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就是可以在本地处理的普通文本流.

 

 

你可能感兴趣的:(html,null,url,query,encoding)