2

我的服务器上有一些图像,以特殊字符 (å,ä,ö) 命名。我不知道如何转换 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

4 回答 4

2

我认为这完全取决于网络服务器使用的编码。

由于从您的测试来看,ISO-Latin-1 似乎不起作用,您可以尝试kCFStringEncodingISOLatin1kCFStringEncodingUTF8.

于 2012-04-11T13:03:24.707 回答
1

尝试这个 :

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

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

资料来源:如何在 Objective-C、iPhone 等中真正对 NSString 进行 URL 编码。

编辑:

你有没有尝试过

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

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

注意NSISOLatin1StringEncoding代替NSUTF8StringEncoding

于 2012-04-11T13:04:11.130 回答
0

尝试这个

创建 NSURL

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

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

 NSLog("%@",[url absoluteString]);
于 2012-04-11T15:13:21.640 回答
0

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

NSURL *url = [NSURL URLWithString:[[imageURL stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
于 2012-12-31T04:08:37.620 回答