具有特殊字符的NSURL(åäö)

时间:2012-04-11 12:57:31

标签: php iphone ios nsurl

我的服务器上有一些图像,以特殊字符(å,ä,ö)命名。我无法弄清楚如何转换NSUrl来获取它们:

    NSString *urlString = [NSString stringWithFormat: @".../Images/%@Image.png", playerName]; 

    NSURL *url = [NSURL URLWithString: [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

    NSLog(@"url:%@", url);

    //Get the image and assign it to the player
    NSData *imageData = [NSData dataWithContentsOfURL:url];
    UIImage *image = [UIImage imageWithData:imageData];

以上示例中的日志(如果“playerName”=åäö):

.../Images/%C3%A5%C3%A4%C3%B6Image.png

但我需要它:

.../Images/åäöImage.png

我尝试了不同的(stringByAddingPercentEscapesUsingEncoding)和下面的代码但没有成功:

- (NSString *)URLEncodingOfString:(NSString *)s
{
return (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes
(kCFAllocatorDefault, (__bridge CFStringRef)s, NULL, NULL,
 kCFStringEncodingISOLatin1);
 }

非常感谢任何建议, 提前致谢

4 个答案:

答案 0 :(得分:2)

我认为这完全取决于Web服务器正在使用的编码。

由于ISO-Latin-1似乎从您的测试到工作,您可能会尝试将kCFStringEncodingISOLatin1替换为kCFStringEncodingUTF8

答案 1 :(得分:1)

试试这个:

NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(
    NULL,
    (CFStringRef)unencodedString,
    NULL,
    (CFStringRef)@"!*'();:@&=+$,/?%#[]",
    kCFStringEncodingISOLatin1 );

不幸的是,stringByAddingPercentEscapesUsingEncoding方法没有正确编码所有特殊字符。

来源:How to really URL encode an NSString in Objective-C, iPhone, etc.

修改

你试过吗

NSString *urlString = [NSString stringWithFormat: @".../Images/%@Image.png", playerName]; 

NSURL *url = [NSURL URLWithString: [urlString stringByAddingPercentEscapesUsingEncoding:NSISOLatin1StringEncoding]];

请注意NSISOLatin1StringEncoding而不是NSUTF8StringEncoding

答案 2 :(得分:0)

试试这个

创建NSURL

 NSURL *url = [[NSURL alloc]initWithString:stringURL];

stringURL是表示URL的字符串。记录时,试试这个

 NSLog("%@",[url absoluteString]);

答案 3 :(得分:0)

我遇到了这个问题,因为“%C3%89%C3%89”在我试图加载的网址中转换为ÉÉ。这似乎将url转换为所需的格式,以允许我从URL下载文件。

NSURL *url = [NSURL URLWithString:[[imageURL stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];