我通过这种方式读入HTML代码
CHttpFile* file = con->OpenRequest(CHttpConnection::HTTP_VERB_GET, "");
file->SendRequest();
while(file->ReadString(tmpStr))
{
htmlCode += tmpStr;
}
读入后发现非GB2312编码的页面中文显示乱码,WideCharToMultiByte可以进行编码转换,但它需要个WCHAR指针参数,【问题1】我不知道如何把CString转换为WCHAR的。
我想也可以用file->Read(..)读取数据到WCHAR型的数组里,然后转换【问题2】但我不知道一次读取多少合适,是读一段转换一段还是全部读取再转换,如果分段读取如何把它们连接到一起?

解决方案 »

  1.   

    给你一个读取文件,将utf-8 字节码 转化为 GB2312 字节码的例子
    CFile file;
    file.Open(filePath,CFile::modeRead);
    file.Seek(8,CFile::begin);
    file.Read(name,100);
    file.Close();int size=0;
    //获得转换后wchar_t的长度
    size = MultiByteToWideChar (CP_UTF8, 0, name, -1, NULL, 0);
    //按该长度new一个wchar_t数组
    wchar_t* wText = new wchar_t[size];
    //转换
    MultiByteToWideChar (CP_UTF8, 0, name, -1, wText, size);//以下同理size = WideCharToMultiByte(CP_ACP,NULL,wText,-1,NULL,0,NULL,FALSE);
    char* ansiName = new char[size];
    WideCharToMultiByte(CP_ACP,NULL,wText,-1,ansiName,size,NULL,FALSE);CString strName(ansiName);  //所求字符串
      

  2.   

    file.Seek(8,CFile::begin); //不是必要的,只是我的程序要而已因为是在我的一个程序拷贝过来的, 没做什么修改
    但你应该看的明白,仿照一下吧,主要思想是想获得转换后wchar_t的长度
    再分配空间,你可以查一下MSDN,里面有很详细的说明
      

  3.   

    谢谢 windboyzsj(落叶)  的回答
    MultiByteToWideChar的用法我是会的
    但这没有解决我的问题,现在获取的数据应该就是WideChar的,但我是存储到CString里了,
    如何能取出来放到WCHAR*里呢?
      

  4.   

    我知道是哪里出问题了,产生乱码是因为获取的数据已经是multibyte的了,而把它再转换成widechar就可以正常显示出来。搞反了呵呵~~ 还是谢谢  windboyzsj(落叶)