LxFTPRequest,獲取文件目錄時,list,文件名解碼出來打印亂碼。

使用LxFTPRequest,進行ftp請求,獲取某個路徑下的文件目錄。


- (void)lFtpFolderSource:(LFileModel *)file{

    LxFTPRequest * request = [LxFTPRequestresourceListRequest];

    file.ipStr = [selfrequireIPstr:file.ipStr];

    NSString *FTP_ADDRESS1 = [NSStringstringWithFormat:@"ftp://%@:%d",file.ipStr,LFtpPort];

    NSString *filePath = [NSStringstringWithFormat:@"%@",[file.fileServerPathsubstringFromIndex:index]];

    request.serverURL = [[NSURLURLWithString:FTP_ADDRESS1]URLByAppendingPathComponent:filePath];

    request.username = file.ftpUserName;

    request.password = file.ftpPassword;

    NSLog(@"resource URL: %@\n%@\n%@",request.serverURL,request.username,request.password);

    request.progressAction = ^(NSInteger totalSize,NSInteger finishedSize,CGFloat finishedPercent) {

        

        NSLog(@"totalSize = %ld, finishedSize = %ld, finishedPercent = %f", totalSize, finishedSize, finishedPercent); //

        

        totalSize = MAX(totalSize, finishedSize);

    };

    request.successAction = ^(Class resultClass,id result) {

        

        NSArray * resultArray = (NSArray *)result;

        [self.resourceListDelegatefileResourceListFeedBackArray:resultArraywithStatus:1];

    };

    request.failAction = ^(CFStreamErrorDomain domain,NSInteger error,NSString * errorMessage) {

        NSLog(@"domain = %ld, error = %ld, errorMessage = %@", domain, error, errorMessage);   //

        NSArray *arr = [NSArrayarrayWithObjects:errorMessage,nil];

        [self.resourceListDelegatefileResourceListFeedBackArray:arrwithStatus:-1];

    };

    [request start];

}

請求成功,拿到的result爲一個數組,數組中的每個元素都爲一個單元:

{

    kCFFTPResourceGroup = 0;

    kCFFTPResourceLink = "";

    kCFFTPResourceModDate = "2017-02-16 00:48:00 +0000";

    kCFFTPResourceMode = 438;

    kCFFTPResourceName = "GIM\U2030\U03a9\U00f8\U00c1\U00ee\U00ae\U00cb\U00d8\U00a5\U00ca\U00f2\U00e9\U2030\U03c0\U00b6.docx";

    kCFFTPResourceOwner = 0;

    kCFFTPResourceSize = 1369;

    kCFFTPResourceType = 8;

}


字典中kCFFTPResourceName爲文件/文件夾 名字,按照正常的文字解碼方式,解出來的是亂碼

GIM‰ΩøÁî®ËØ¥Êòé‰π¶,實際爲:GIM使用說明書.docx。

問題出在,nsstream代理,讀取數據的時候,需要將kCFFTPResourceName進行轉碼:

                            NSString *nameEntry;

                            if ((nameEntry = entry[(id)kCFFTPResourceName])) {

                                entry[(id)kCFFTPResourceName] = [[NSStringalloc]initWithData:[nameEntrydataUsingEncoding:NSMacOSRomanStringEncodingallowLossyConversion:YES]encoding:NSUTF8StringEncoding];}

所以需要去到LxFTPRequest.m文件中,將390行左右位置的代碼照着上面的代碼,修改一下就OK了。
發佈了45 篇原創文章 · 獲贊 1 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章