我正在使用列表来获取ftp网站的内容,并且它工作正常,但在某些情况下,我的名字中有特殊字符的文件,例如:“Márzo22013(8).JPG “,第二个字符。当我调用列表函数时,使用此数据获取NSDictionary(使用nslog):
{
kCFFTPResourceGroup = group;
kCFFTPResourceLink = "";
kCFFTPResourceModDate = "2013-03-09 19:08:00 +0000";
kCFFTPResourceMode = 511;
kCFFTPResourceName = "M\U00b7rzo 2 2013 (8).JPG";
kCFFTPResourceOwner = owner;
kCFFTPResourceSize = 145971;
kCFFTPResourceType = 8;
}
然后使用此
NSLog(@"%@", [[listaArchivos objectAtIndex:0] valueForKey:(id)kCFFTPResourceName]);
我得到了
M·rzo 2 2013 (8).JPG
注意第二个字符,它应该是“á”,我尝试了很多功能但是我无法正确转换我的字符串,我希望有人可以提供帮助
感谢。
埃塞基耶尔。
答案 0 :(得分:0)
我发现了问题,它是在获取字典的函数上,我可以修复它从apple查看simpleFTPSample,在函数文件ListController.m中 - (void)parseListData,我改变了这行
entryToAdd = [self entryByReencodingNameInEntry:(__bridge NSDictionary *) thisEntry encoding:NSASCIIStringEncoding];//NSUTF8StringEncoding
我用ascii更改了utf8,现在我可以正确获取文件名。 现在的问题是无法下载文件。
在此行中,来自示例
的同一文件- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
·
·
bytesRead = [self.networkStream read:buffer maxLength:sizeof(buffer)];
if (bytesRead < 0) {
[self stopReceiveWithStatus:@"Network read error"];
} else if (bytesRead == 0) {
[self stopReceiveWithStatus:nil];
} else {
assert(self.listData != nil);
// Append the data to our listing buffer.
[self.listData appendBytes:buffer length:(NSUInteger) bytesRead];
// Check the listing buffer for any complete entries and update
// the UI if we find any.
[self parseListData];
}
我收到“Netwok读错误”,文件流在document文件夹中创建文件,netwokstreamdown打开,但是无法读取,有些建议吗?
感谢。
答案 1 :(得分:0)
你能试试这段代码吗?
NSString *sourcestr = @"ë,à,é,ä all to e,a,e,a";
NSData *temp = [sourcestr dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *outputStr = [[[NSString alloc] initWithData:temp encoding:NSASCIIStringEncoding] autorelease];
NSLog(@"converted: %@", outputStr);
它的工作对我很好