Ios 解码字符串iphonesdk

Ios 解码字符串iphonesdk,ios,cocoa-touch,nsstring,Ios,Cocoa Touch,Nsstring,我使用列表来获取ftp站点的内容,它工作得很好,但在某些情况下,我的文件名称中有特殊字符,例如:“márzo 2 2013(8).JPG”,第二个字符。当我调用列表函数y时,获取包含此数据的NSDictionary(使用nslog): 然后用这个 NSLog(@"%@", [[listaArchivos objectAtIndex:0] valueForKey:(id)kCFFTPResourceName]); 我明白了 注意第二个字符,它应该是“á”,我尝试了很多函数,但是我不能正确转换我的

我使用列表来获取ftp站点的内容,它工作得很好,但在某些情况下,我的文件名称中有特殊字符,例如:“márzo 2 2013(8).JPG”,第二个字符。当我调用列表函数y时,获取包含此数据的NSDictionary(使用nslog):

然后用这个

NSLog(@"%@", [[listaArchivos objectAtIndex:0] valueForKey:(id)kCFFTPResourceName]);
我明白了

注意第二个字符,它应该是“á”,我尝试了很多函数,但是我不能正确转换我的字符串,我希望有人能帮助我

谢谢


以西结

我发现了问题,是在获取字典的函数上,我可以通过查看苹果的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];
        }
-(void)流:(NSStream*)aStream handleEvent:(NSStreamEvent)事件代码
·
·
bytesRead=[self.networkStream read:buffer maxLength:sizeof(buffer)];
如果(字节读取<0){
[self-stopReceiveWithStatus:@“网络读取错误”];
}else if(bytesRead==0){
[自动停止接收状态:无];
}否则{
断言(self.listData!=nil);
//将数据附加到我们的列表缓冲区。
[self.listdataappendbytes:缓冲区长度:(NSUInteger)字节读取];
//检查列表缓冲区中是否有完整的条目和更新
//用户界面,如果我们找到任何。
[自解析列表数据];
}
我得到了“Netwok读取错误”,filestream在documents文件夹中创建文件,netwokstreamdown打开,但无法读取,一些建议

谢谢。

你能试试这个代码吗

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

这对我来说很好

只是NSLog无法忍受字符串编码。将字符串写入一个文件,在一个像样的文本编辑器中查看,就可以了。它需要显示在日志中,因为我使用文件名下载文件,当我尝试下载时,由于文件名错误,我得到一个错误。我意识到“M\U00b7rzo 2 2013(8).JPG”转换为“M·rzo 2 2013(8).JPG”,但在ftp服务器中,文件名是“Márzo 2 2013(8).JPG”,为什么列表函数无法读取实际值?问题解决了,所有问题都是不同编码类型的问题,但很难跟踪来源。谢谢
- (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];
        }
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);