最近在写一个网页分析程序,在读取网页内容时总是出现乱码,我的编译器环境是Unicode的,我按照网上的说明调用 charToUnicode 部分转换过来了,但是我发现网页本来很长的,结果读取出来只有很短,丢失很多信息
        CInternetSession session(NULL, 0);
CStdioFile* pHttpFile = (CStdioFile*)session.OpenURL(strURL, 1, INTERNET_FLAG_TRANSFER_BINARY);

CString strHtmlSource ,strTemp;
while(pHttpFile->ReadString(strTemp))
{
   ::function(strBuf);
   strHtmlSource += strBuf;
}

解决方案 »

  1.   

    呵呵,这个问题我遇到过,可惜我是用C#的,只好从原理上说一下了:楼主对字符编码了解还很有限。在windows系统内部,字符编码可分为宽字符(unicode)和ASCII,charToUnicode可以完成转换任务。但到了网络上,字符编码可就分类更多了,有十几种之多(网络传输需要)。就是unicode,也分了好几种编码方式。你的charToUnicode用错了地方。正确方法是:先用ASCII编码方式获取网页源码,用正则表达式获取该网页编码信息(正规网页在其头部都包含类似charset=...的编码信息)。由于编码信息是用英文表示,所以你用ASCII就暂时先可以了。极少数网页没有编码信息,那就撤吧。。目前还未在网上找到有效解决办法。获得编码信息后,用该编码来读取网页数据,再转换成系统string,这样就没乱码了。你从网上搜一下吧,肯定能找到源码的。
      

  2.   

    可能是编码的问题,看看你的下载html文件是什么编码的,看看html网页的源文件类似下面这样的<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      

  3.   

    对于读取的网页数据(作为字节看待),进行必要的预处理
    比如将任何杂毛的字节全部处理为空格,然后再进行后续处理
    实际上,utf-8是最不麻烦的了,因为它看起来与ansi无异,其它的异种语言的解析才是问题
      

  4.   

    应该是utf8的,也没什么麻烦的,转一下就可以了
    你就网上找下utf8转unicode的,有很多例子的