在这些命令之后:
[L] PASV
[L] 227 Entering Passive Mode (202,38,193,212,14,234)
[L] 正在打开数据连接 IP: 202.38.193.212 端口: 3818
[L] LIST -al
[L] 150 Opening ASCII mode data connection for /bin/ls.
[L] 226 Transfer complete.
------------------------------------
得到文件列表目录信息为乱码,目录包含中文,
数据大小为470B.(当登陆外国ftp网站时,是成功的)
--------------------------------------------------
使用MS 命令行下面的ftp命令,进入同样目录,得到数据为1288B
--------------------------------------------
搜索了n久,发现m多人同样如此,但他们解决了,没有给出方法!!
                  很郁闷ing.........
试图使用:
//将ASCII码转换为GB2312
int   nLen   =   lstrlen(temp);//lstrlen(temp)>>1-1; 
    BSTR   str   =   ::SysAllocStringLen(NULL,   nLen);   
int len=MultiByteToWideChar(CP_ACP,0,temp,-1,str,nLen);
temp=(LPCSTR)str;
-----------------------失败
新人,没有奖励,希望各位路过,
随便指点指点,小子就已经心满意足了!

解决方案 »

  1.   

    望眼欲穿.........
    等待ing................
      

  2.   

    //将ASCII码转换为GB2312
    int nLen = lstrlen(temp);//lstrlen(temp)>>1-1;
    // 先转成Unicode编码
    int nWideLen = MultiByteToWideChar(CP_ACP,0,temp,-1,NULL,0);
    wchar_t* buff = new wchar_t[nWideLen+1];
    buff[nWideLen] = 0;
    MultiByteToWideChar(CP_ACP,0,temp,-1,buff, nWideLen);
    // 再转成UTF-8编码(中文编码)
    int nUtf8Len = WideCharToMultiByte(CP_UTF8, 0, buff, nWideLen, NULL, 0, NULL, NULL);
    char* buff2 = new char[nUtf8Len+1];
    buff2[nUtf8Len] = 0;
    WideCharToMultiByte(CP_UTF8, 0, buff, nWideLen, buff2, nUtf8Len, NULL, NULL);buff2就是中文了用完后记得delete [] buff, delete [] buff2;
      

  3.   

    数据这样接收:DataChannel.Receive (this->m_btBuf.GetData(),4096,0);
    数据是文件目录列表信息,List命令返回的数据.
    然后这样分析:
    CString temp = CString((LPCTSTR)m_btBuf.GetData());
    //将ASCII码转换为GB2312
    int   nLen   =   lstrlen(temp);//lstrlen(temp)>>1-1; 
        BSTR   str   =   ::SysAllocStringLen(NULL,   nLen);   
    int len=MultiByteToWideChar(CP_ACP,0,temp,-1,str,nLen);
    temp=(LPCSTR)str;
    -----------------------失败
    然后使用你的代码分析调试,还是乱码,
    ------------------------------------失败??
        如何提取文件目录信息???
    --------------------------------
      

  4.   

    命令:LIST -al
    然后,一片乱码!!
    -----------------------------------------------------
    使用你的代码分析,
    然后又一片乱码,
    如何提取这个目录信息(MS 命令行下ftp命令得到):
    ------------------------------------
    drw-rw-rw-   1 user     group           0 Apr 29  2006 (060418)影视FTP开始实施新
    的帐号登陆制度!!请见文件夹内说明
    drw-rw-rw-   1 user     group           0 Apr 29  2006 .
    drw-rw-rw-   1 user     group           0 Apr 29  2006 ..
    -rw-rw-rw-   1 user     group           0 Mar 26  2003 0.【百步梯影视FTP】ftp.10
    0steps.net
    -rw-rw-rw-   1 user     group           0 Nov 10  2002 1.【   注意   】服务器保
    留完整的日志记录
    -rw-rw-rw-   1 user     group           0 Mar 26  2003 2.【Divx管理员】Xmas@w18
    ,木棉
    -rw-rw-rw-   1 user     group           0 Apr 18  2006 4.【   TV类   】清风
    -rw-rw-rw-   1 user     group           0 Dec 28  2003 4.【  集锦类  】maoku@w18
    ,木棉
    -rw-rw-rw-   1 user     group           0 Apr 29  2006 5.注意:匿名登录空闲超时
    为1分钟,请使用浏览帐户浏览
    drw-rw-rw-   1 user     group           0 Apr 24  2006 _incoming
    drw-rw-rw-   1 user     group           0 Dec 13  2005 divx
    drw-rw-rw-   1 user     group           0 Jul  3  2006 电视1
    d---------   1 user     group           0 Jan  1  1980 电视2
    drw-rw-rw-   1 user     group           0 Aug 26 14:13 集锦
    drw-rw-rw-   1 user     group           0 Jul 10  2006 晴天娃娃
    drw-rw-rw-   1 user     group           0 Jul 17  2004 挑战杯视频新闻
      

  5.   


    检查SYST 是不是 UNIX TYPE L8
      

  6.   

    检查SYST 是不是 UNIX TYPE L8
    ------------------------------------
    说的就是它: UNIX TYPE L8!!
    -------------------
    对于上面给出的文件列表:
    ------------------------------------
    得到文件列表目录信息为乱码,目录包含中文,数据大小为470B.
    (当本程序登陆外国ftp网站时,是成功的)
    --------------------------------------------------
    使用MS 命令行下面的ftp命令,进入同样目录,得到数据为1288B,
    ------------------------------------------------------------
    这个列表,这样获取得到:
    -----------------------
    if ((!asDataChannel.AsyncSelect (0))||
                  (!asDataChannel.IOCtl (FIONBIO,&lpArgument)))
    {
    return FALSE;
    } //获取数据
    sum = 0;
    while (1) 
    {
    TRY
    {
    num = asDataChannel.Receive (this->m_btBuf.GetData(),BUFSIZE,0);
    if ((num==0)||(num == SOCKET_ERROR))//读取数据到缓冲this->m_btBuf
    break;
    sum += num;
    this->m_btBuf.SetSize (sum+BUFSIZE);
    }
    CATCH(CException,e)
    {
    return FALSE;
    }
    END_CATCH
    }
    asDataChannel.Close ();
    if (!(ReadStr ())) return FALSE; //接收数据完成的应答
      

  7.   

    乱码?是不是用了mode z命令什么的?压缩了