您的位置:首页 > 移动开发 > IOS开发

IOS开发FTP中文目录和文件名乱码解决办法

2012-10-14 21:49 2221 查看
在ios下需要实现一个ftp的客户端,发现中文的目录和文件名是乱码,google了很久,apple自己带的ftp示例里面有方法解决:

- (NSDictionary *)entryByReencodingNameInEntry:(NSDictionary *)entry encoding:(NSStringEncoding)newEncoding
// CFFTPCreateParsedResourceListing always interprets the file name as MacRoman,
// which is clearly bogus <rdar://problem/7420589>.  This code attempts to fix
// that by converting the Unicode name back to MacRoman (to get the original bytes;
// this works because there's a lossless round trip between MacRoman and Unicode)
// and then reconverting those bytes to Unicode using the encoding provided.
{
NSDictionary *  result;
NSString *      name;
NSData *        nameData;
NSString *      newName;

newName = nil;

// Try to get the name, convert it back to MacRoman, and then reconvert it
// with the preferred encoding.

name = [entry objectForKey:(id) kCFFTPResourceName];
if (name != nil) {
assert([name isKindOfClass:[NSString class]]);

nameData = [name dataUsingEncoding:NSMacOSRomanStringEncoding];
if (nameData != nil) {
newName = [[NSString alloc] initWithData:nameData encoding:newEncoding];
}
}
NSLog(@"name is %@",name);

NSLog(@"newname is %@",newName);

// If the above failed, just return the entry unmodified.  If it succeeded,
// make a copy of the entry and replace the name with the new name that we
// calculated.

if (newName == nil) {
assert(NO);                 // in the debug builds, if this fails, we should investigate why
result = (NSDictionary *) entry;
} else {
NSMutableDictionary *   newEntry;

newEntry = [entry mutableCopy];
assert(newEntry != nil);

[newEntry setObject:newName forKey:(id) kCFFTPResourceName];

result = newEntry;
}

return result;
}


其实就是返回的编码是 NSMacOSRomanStringEncoding 需要转换为NSUTF8StringEncoding。奇怪吧是NSMacOSRomanStringEncoding。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: