ftp 接收的数据为乱码,如何处理??

xu_gaoxing 2007-01-16 09:31:00
在这些命令之后:
[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;
-----------------------失败
新人,没有奖励,希望各位路过,
随便指点指点,小子就已经心满意足了!
...全文
354 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnlzx 2007-01-19
  • 打赏
  • 举报
回复
乱码?是不是用了mode z命令什么的?压缩了
xu_gaoxing 2007-01-17
  • 打赏
  • 举报
回复
检查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; //接收数据完成的应答


Juchiyufei 2007-01-17
  • 打赏
  • 举报
回复
接分快乐

:) ...

学习也快乐哈
yjgx007 2007-01-17
  • 打赏
  • 举报
回复
像楼上所说,可能字节序也需要变化
danscort2000 2007-01-17
  • 打赏
  • 举报
回复

检查SYST 是不是 UNIX TYPE L8
xu_gaoxing 2007-01-17
  • 打赏
  • 举报
回复
命令: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 挑战杯视频新闻
xu_gaoxing 2007-01-17
  • 打赏
  • 举报
回复
数据这样接收: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;
-----------------------失败
然后使用你的代码分析调试,还是乱码,
------------------------------------失败??
如何提取文件目录信息???
--------------------------------
yjgx007 2007-01-16
  • 打赏
  • 举报
回复
//将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;
xu_gaoxing 2007-01-16
  • 打赏
  • 举报
回复
望眼欲穿.........
等待ing................

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧