QFTP SERV-U(UTF-8)中文文件以及中文文件夹乱码问题

XoAoX 2011-04-18 03:53:47
前段时间被wxftp和qftp搞死了
之前用mfc写了基于dialog的客户端

不满意,要求像360那么花哨的
害的我分别用wxWidgets和qt重写了两遍

到现在我还一遗留问题
----------------------------------------
serv-u(已设置 "对所有已收发的文件和路径名使用UTF-8编码")
qt环境下


现在下行解码没问题.就是上行的时候命令用serv-u日志看都是乱码,不能正确解释返回错误

获取文件列表(没问题)
-----------------------------------------------------
void DialogSynchor::listInfo ( const QUrlInfo & i )
{
QString name = i.name();
QByteArray arr = name.toLatin1();
name = QString::fromUtf8(arr);

FtpFileInfoModel ftpFile;
if(i.isDir()){
if("." == name || ".." == name || ftpListCommandTemp == name)return;
ftpFile.setDir(true);
ftpFile.setName(name);
}else{
ftpFile.setLength(i.size());
ftpFile.setDir(false);
ftpFile.setName(name);
}
ftpListTemp.push_back(ftpFile);
}
-----------------------------------------------

下载文件(有问题)
--------------------------------------------------
int DialogSynchor::doFtpDownloadFile(QString localPath,QString remotePath)
{
ftpCommandFinished = false;
ftpReadyRead = false;
ftpDownloadLocalPath = localPath;

// char *tmp = remotePath.toLocal8Bit().data();
// std::string str = remotePath.toStdString();
// QTextCodec *codec = QTextCodec::codecForLocale();
// //the text is unicode so it should cover from unicode to chinese
// char *sec = (codec->fromUnicode(remotePath)).data();
// printf("sec %s\n",sec);
// QByteArray arr = remotePath.toLatin1();
// QString remotePathTemp = QString::fromAscii(arr);
ftpDownloadLocalFile = new QFile(localPath);
if (!ftpDownloadLocalFile->open(QIODevice::WriteOnly)) {
return eonx_error::file_cannot_write;
}

// pFtp->get(remotePath,ftpDownloadLocalFile);
// QString ansiFilePath = QString::fromLocal8Bit(remotePath.toLatin1());
// pFtp->get(ansiFilePath,ftpDownloadLocalFile);
pFtp->get(remotePath,ftpDownloadLocalFile);
return eonx_error::noerror;
}
====================================================
求解
...全文
1022 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dbzhang800 2011-04-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xoaox 的回复:]

没人气啊
[/Quote]

看这个吧

http://qtcn.org/bbs/read.php?tid=33167&page=1

主要概念要清楚,特别是QFtp中出现QString的地方(个人认为是QFtp设计的严重失误,如果是都换成QByteArray将非常容易理解和使用)
* 下行:使用 QString::toLatin1() 得到字节流,然后解码该字节流 QString::fromUtf8 ,得到正确的QString
* 上行:编码 QString::toUtf8 得到字节流,解码字节流QString::toLatin1 得到需要传递的 QString

XoAoX 2011-04-20
  • 打赏
  • 举报
回复
没人气啊
XoAoX 2011-04-20
  • 打赏
  • 举报
回复
再次感谢,结贴
XoAoX 2011-04-20
  • 打赏
  • 举报
回复
感谢7楼
-------------------------
pFtp->get(remotePath.toUtf8(),ftpDownloadLocalFile);

问题解决了
dbzhang800 2011-04-20
  • 打赏
  • 举报
回复
整理了一下,可能更清楚一点:

http://blog.csdn.net/dbzhang800/archive/2011/04/20/6335818.aspx
风起浮尘 2011-04-18
  • 打赏
  • 举报
回复
抓包看看到底是那一端的问题。
戒指 2011-04-18
  • 打赏
  • 举报
回复
ftpDownloadLocalFile 要不要转化下编码成uft-8呢?
看看山观观海 2011-04-18
  • 打赏
  • 举报
回复
这个是ftp??一个个弹窗验证下呢?

16,215

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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