解码字符串iPhone SDK

时间:2013-03-09 22:31:58

标签: ios cocoa-touch nsstring

我正在使用列表来获取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

注意第二个字符,它应该是“á”,我尝试了很多功能但是我无法正确转换我的字符串,我希望有人可以提供帮助

感谢。

埃塞基耶尔。

2 个答案:

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

它的工作对我很好