QFTP 切换路径中文乱码的解决

1 篇文章 0 订阅

QFTP 切换路径中文乱码的解决

1、main函数设置 编码(测试win7)
 //设置字符编码,防止中文乱码(测试win7+win2008+win10通过)
 QTextCodec *_codec = QTextCodec::codecForName("UTF-8");
 QTextCodec::setCodecForTr(_codec);
 QTextCodec::setCodecForLocale(QTextCodec::codecForLocale());
 QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());

2、转换项目 cpp、 h文件为utf8编码 
 
3、转换 编码格式转化为FTP编码格式
/*************************************************************************
*处理内容:将GBK编码格式转化为FTP编码格式
*@param:gbkCode  待转化字符串
*@return
*@exception
**************************************************************************/
QString MyFtp::gbkCodeToFtpCode(const QString &gbkCode)
{
//    QTextCodec *codec = QTextCodec::codecForName("utf-8");
//       if (codec)
//       {
//           return codec->toUnicode(gbkCode.toLatin1());
//       }
//       else
//       {
//           return QString("");
//       }
//    //return  QString::fromLocal8Bit(gbkCode.toLatin1());

    QString TempResult;

    //1.提取数据

    //size_t InStrBufSize = gbkCode.toUtf8().size();
    size_t InStrBufSize = gbkCode.toAscii().size();

    char* InStrBuf = (char *)malloc(InStrBufSize);//= InputStr.toAscii().data();
    memset(InStrBuf, 0, InStrBufSize);
    if (InStrBuf == NULL)
    {
        return TempResult;
    }

    memcpy(InStrBuf, qPrintable(gbkCode), InStrBufSize);

    //2.建立输出缓冲
    //输出缓冲大小要比Ascii字节*2后多两个字节 用于标识输出字符串结尾
    size_t OutStrBufSize = (InStrBufSize + 1) * sizeof(QChar);
    quint16* OutStrBuf = (quint16 *)malloc(OutStrBufSize);
    if (OutStrBuf == NULL)
    {
        return TempResult;
    }
    memset(OutStrBuf, 0, OutStrBufSize);
    //3.重新编码
    size_t i = 0;
    for(i = 0; i < InStrBufSize; i++)
    {
        OutStrBuf[i] = (quint8)InStrBuf[i];
    }
    //4.数据重新组装
    TempResult = QString::fromUtf16(OutStrBuf);
    free(InStrBuf);
    free(OutStrBuf);
    return TempResult;
}


4、示例

void connectFtpServer(QString& ftpUrl)
{
 //QString ftpUrl = _ToSpecialEncoding(_ftpUrl);
 LogInfo("ftpUrl:%s", ftpUrl.toLocal8Bit().data());
 QUrl _url(ftpUrl);

 LogInfo("host:%s,user:%s,pswd:%s,path:%s", _url.host().toLocal8Bit().data(), _url.userName().toLocal8Bit().data(), _url.password().toLocal8Bit().data(), _url.path().toLocal8Bit().data());
 if (!_url.isValid() || _url.scheme().toLower() != QLatin1String("ftp"))
 {
  connectToHost(ftpUrl, 21);
  login();
 }
 else
 {
  connectToHost(_url.host(), _url.port(21));
  if (!_url.userName().isEmpty())
   login(QUrl::fromPercentEncoding(_url.userName().toLatin1()), _url.password());
  else
   login();
  if (!_url.path().isEmpty())
  {
   QString strPath = gbkCodeToFtpCode(_url.path());
   cd(strPath);
   //cd(_url.path());
  }
 }
}


qftp 是一种用于文件传输和管理的协议,而乱码则是指在使用 qftp 时,中文目录名称显示为乱码的问题。 出现 qftp 中文目录乱码的情况通常是由于以下几个原因导致的: 1. 字符编码问题:qftp 默认使用的字符编码可能与中文目录名称使用的字符编码不一致,导致显示乱码。可以尝试设置 qftp 的字符编码为 UTF-8,以保证中文目录名称的正确显示。 2. 网络传输问题:在使用 qftp 进行文件传输时,如果网络环境不稳定或存在干扰,可能会导致传输的中文目录乱码。可以尝试使用更稳定的网络连接,或在传输前对中文目录进行压缩处理,以避免传输时的字符编码问题。 3. 系统环境问题:有些操作系统的默认字符编码与 qftp 的字符编码不一致,也可能导致中文目录乱码。在这种情况下,可以尝试更改操作系统的字符编码设置,以与 qftp 保持一致。 为解决 qftp 中文目录乱码问题,可以采取以下措施: 1. 设置字符编码:在使用 qftp 之前,可以明确指定字符编码为 UTF-8,以确保中文目录名称的正确显示。 2. 压缩文件传输:在进行文件传输时,将中文目录先进行压缩,然后再进行传输。这样可以避免传输时的字符编码问题,同时也能节省传输的时间和带宽。 3. 更改操作系统字符编码设置:如果 qftp 与操作系统的字符编码设置不一致,可以尝试更改操作系统的字符编码,使其与 qftp 保持一致。 综上所述,解决 qftp 中文目录乱码问题的关键是确保字符编码一致,并在传输中注意网络稳定性,如此可有效避免中文目录乱码的出现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值