LxFTPRequest,获取文件目录时,list,文件名解码出来打印乱码。
2017-02-20 10:08
183 查看
使用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了。
- (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了。
相关文章推荐
- 黑马程序员——list()返回该目录下文件,文件夹,listFiles()返回文件文,件夹对象,递归调用获取所有文件,文件夹,以及文件名过滤
- Python模块函数:os.listdir 打印Win7目录中的文件-中文乱码问题
- 递归函数,打印指定文件目录下的文件夹和文件名,各子文件夹下也要打印出来
- 获取指定目录下指定类型所有文件的全路径及文件名
- 获取任意文件路径及文件名、运行程序当前目录
- java文件过滤器(File类listFiles方法可选参数)--获取目录下指定的某类文件
- 使用windows API函数获取目录下所有文件名---目录下文件的扫描和处理
- Appach FTPClient 遍历服务器目录文件,文件名奇数中文乱码 UTF-8 GBK ISO-8859-1
- JavaScript获取当前文件全路径、当前目录、当前文件名
- linux 获取文件路径中的目录路径和文件名
- 文件目录获取获取文件名类型demo
- java文件过滤器(File类listFiles方法可选参数)--获取目录下指定的某类文件
- JavaScript获取当前文件全路径、当前目录、当前文件名
- java文件过滤器(File类listFiles方法可选参数)--获取目录下指定的某类文件
- 在指定目录中查找指定类型的文件,并且获取文件名再显示
- 分享下java 读取目录及子目录下指定文件名的路径 并放到一个List数组里面返回遍历和写到文件里
- FCKeditor的配置、上传文件、文件名乱码和目录的设定
- 获取当前目录所有文件名 并且保存为1个00000.txt的文件文件bat
- TCHAR CHAR WCHAR转换 和 获取一个目录下所有文件名及修改特定文件
- android c成代码编译出来的bin(system/bin/目录下)文件 ,在代码中增加打印的方法