2012-04-11 4 views
2

У меня есть некоторые изображения на моем сервере, названные специальными символами (å, ä, ö). Я не могу понять, как преобразовать 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); 
} 

Любой совет очень ценится, Спасибо заранее

+0

Какой тип веб-сервера содержит файл? Apache? Я предполагаю, что ваш веб-браузер извлекает его, когда вы помещаете имя файла в строку URL. Какой веб-браузер вы используете? (Причина, по которой я задаю вопрос с клиентом и сервером, заключается в том, чтобы мы могли исследовать, какая кодировка используется по умолчанию.) – sblom

+0

Привет, спасибо за ответ. Yup, когда я печатаю его в браузере, он отлично работает .. И он также работает с iphone с NSURL без каких-либо специальных символов ... Это просто NSURL преобразует специальные символы в какой-то другой материал, который вызывает проблему. – BlackMouse

+0

@BlackMouse Привет, вы нашли решение? –

ответ

2

Я думаю, что это будет полностью зависеть от того, что кодирующая веб-сервер использует.

Поскольку ISO-Latin-1 не кажется, из вашего теста, чтобы работать, вы можете попробовать заменить kCFStringEncodingISOLatin1 на kCFStringEncodingUTF8.

+0

Спасибо, но это не сработало :( – BlackMouse

1

Попробуйте это:

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

К сожалению, метод stringByAddingPercentEscapesUsingEncoding не кодирует все специальные символы правильно.

Источник: How to really URL encode an NSString in Objective-C, iPhone, etc.

EDIT:

Вы пробовали

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

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

Обратите внимание на NSISOLatin1StringEncoding вместо NSUTF8StringEncoding

+0

Спасибо, но это не сработало :( – BlackMouse

+0

Я только что отредактировал ответ с чем-то еще, что вы можете попробовать – Mutix

+0

Спасибо .. Я попробовал и по-прежнему получаю неправильный URL: Изображения/jag% E4rdator.png (Если имя jagärdator.png) – BlackMouse

0

Try This

Для создания NSURL

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

stringURL является строка, представляющая URL. При входе, попробуйте этот

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

Я выбежала в этот вопрос из-за «% C3% 89% C3% 89», который превращается в Ee в URL я пытался загрузить. Казалось, что он преобразует url в нужный формат, чтобы я мог загрузить файл с URL-адреса.

NSURL *url = [NSURL URLWithString:[[imageURL stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
Смежные вопросы