• 5430阅读
  • 4回复

[提问]Qt4.84开发Qftp时遇到的中文乱码的问题 [复制链接]

上一主题 下一主题
离线davie
 

只看楼主 倒序阅读 楼主  发表于: 2013-03-01
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2013-04-01) —
关键词: Qftp,乱码
如题,开发过程中,遇到了中文乱码问题,包括Get方法将文件目录添加到LIst时,以及用Put方法将中文文件或者文件夹上传到Ftp服务器上去的时候,若是有中文就不能上传成功,若是英文就没有问题,网上的

然后在工程的main函数中,QApplication app...下一行写如下代码:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8"));
#ifdef Q_OS_WIN
QTextCodec::setCodecForLocale(QTextCodec::codecForName("gbk"));
#else
QTextCodec::setCodecForLocale(QTextCodec::codecForName("utf8"));
#endif
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));

并写两个转换函数,QString _ToSpecialEncoding(const QString &InputStr);
和QString _FromSpecialEncoding
根本不能解决问题,望有人帮助解决!
---以将Ftp服务器上的文件或者文件夹添加到List时为例,Info.name()(QUrlInfo)得到时已经是乱码了,转换了也不可能正确,这是我调试看到的现象
有人帮解决一下,或者指出哪里有问题,十分感谢!
谢谢!
离线dbzhang800

只看该作者 1楼 发表于: 2013-03-01
blog.csdn.net/dbzhang800/article/details/6335818
离线pxiao_xiao

只看该作者 2楼 发表于: 2013-03-01
/*************************************************************************
*处理内容:将FTP编码格式转化为GBK
*@param:ftpString        待转化字符串
*@return:
*@exception
**************************************************************************/
QString FtpClient::ftpCodeToGBKCode(const QString &ftpString)
{
    QString TempResult;  
    //1.提取数据  
    size_t InStrBufSize = ftpString.size() * sizeof(QChar);  
    char* InStrBuf = (char *)malloc(InStrBufSize);  
    if (InStrBuf == NULL)      
    {  
        return TempResult;  
    }  
    memcpy(InStrBuf, ftpString.data(), InStrBufSize);  
    //2.拆分数据  
    size_t i;  
#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN  
    //小端对齐下(基于Intel的x86架构)  
    //原始数据下标 0 2 4 6 8 10  
    //修复数据下标 0 1 2 3 4 5  
    i= 0;  
    for (i = 0; i < InStrBufSize; i = i + 2)      
    {  
        InStrBuf[i >> 1] = InStrBuf;      
    }  
    memset(InStrBuf + (i >> 1), 0, i >> 1);  
#else  
    //大端对齐下  
    //原始数据下标 1 3 5 7 9  
    //修复数据下标 0 1 2 3 4  
    i = 1;  
    for (i = 1; i <= InStrBufSize; i = i + 2)  
    {  
        InStrBuf[(i - 1) >> 1] = InStrBuf;  
    }  
    memset(InStrBuf + ((i - 1) >> 1), 0, (i - 1) >> 1);
#endif  
    //3.数据重新组装  
    TempResult = TempResult.fromAscii(InStrBuf);  
    free(InStrBuf);  
    return TempResult;  
}

/*************************************************************************
*处理内容:将GBK编码格式转化为FTP编码格式
*@param:gbkCode        待转化字符串
*@return:
*@exception
**************************************************************************/
QString FtpClient::gbkCodeToFtpCode(const QString &gbkCode)
{
    QString TempResult;  
    //1.提取数据  
    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, gbkCode.toAscii().constData(), 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 = (quint8)InStrBuf;  
    }  
    //4.数据重新组装  
    TempResult = QString::fromUtf16(OutStrBuf);  
    free(InStrBuf);  
    free(OutStrBuf);  
    return TempResult;  
}
离线davie

只看该作者 3楼 发表于: 2013-03-07
问题已经解决,我也找到了1楼的博客,谢谢了
离线dnn_xin

只看该作者 4楼 发表于: 2013-03-12
回 3楼(davie) 的帖子
请问 是如何解决的啊?
快速回复
限100 字节
 
上一个 下一个