2013-03-09 78 views
1

我使用列表来获取一个ftp站点的内容,它工作正常,但在某些情况下,我有他们的名字中有特殊字符的文件,比如这个:“Márzo2 2013( 8).JPG“,第二个字符。当我打电话上市函数y得到的NSDictionary与此数据(使用的NSLog):解码字符串iPhone SDK

{ 
    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 

通知的第二个字符,它应该是“á”,我试了很多功能,但我不能正确地转换我的字符串,我希望有人可以帮助

谢谢。

Ezequiel。

+0

这只是NSLog的无法忍受的字符串编码。将字符串写入一个文件,在一个正常的文本编辑器中查看它,它会很好。 – 2013-03-09 22:35:07

+0

它需要显示在日志中,因为我使用文件名来下载文件,而当我尝试下载时,由于文件名错误导致错误 – crono81 2013-03-09 22:48:38

+0

我意识到“M \ U00b7rzo 2 2013(8 ).JPG“转换为”M·rzo 2 2013(8).JPG“,但在ftp服务器中文件名为”Márzo2 2013(8).JPG“,为什么列表函数无法读取实际值? – crono81 2013-03-10 00:07:15

回答

0

我发现这个问题,这是对获取的字典功能,我可以修复它从苹果看simpleFTPSample,在函数的文件ListController.m - (空)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读取错误”的例子中的同一个文件,文件流创建的文档文件夹中的文件时,打开netwokstreamdown,但能不会被阅读,有些建议?

谢谢。

+0

问题解决了,所有的问题都与不同的编码类型有关,但很难追踪原点。谢谢 – crono81 2013-03-12 17:30:08

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); 

它的工作对我罚款