2013-03-09 50 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); 

它的工作對我罰款