2012-04-11 19 views
2

Ich habe einige Bilder auf meinem Server, die mit Sonderzeichen (å, ä, ö) benannt sind. Ich kann nicht herausfinden, wie die NSURL zu konvertieren, sie zu erhalten:NSURL mit Sonderzeichen (åäö)

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

Das Protokoll im obigen Beispiel (wenn „player“ = AAO):

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

aber ich muß es sein :

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

ich habe versucht, verschiedene (stringByAddingPercentEscapesUsingEncoding) und den Code unten ohne Erfolg:

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

Jede Beratung wird sehr geschätzt, Vielen Dank im Voraus

+0

Welche Art von Webserver hostet die Datei? Apache? Ich gehe davon aus, dass Ihr Webbrowser es in Ordnung bringt, wenn Sie den Dateinamen in die URL-Leiste einfügen. Welchen Webbrowser benutzen Sie? (Der Grund, warum ich die Client- und Serverfrage stelle, ist, dass wir untersuchen können, welche Kodierung jeder standardmäßig verwendet.) – sblom

+0

Hallo, danke für die Antwort. Yup, wenn ich es in den Browser eintippe funktioniert es gut .. Und es funktioniert auch vom iPhone mit dem NSURL ohne irgendwelche Sonderzeichen ... Es nur die NSURL konvertiert die Sonderzeichen in einige andere Sachen, die das Problem verursacht .. – BlackMouse

+0

@BlackMouse Hallo, hast du irgendeine Lösung gefunden? –

Antwort

2

ich denke, es ganz auf welcher abhängen werde der Web-Server codiert, verwendet.

Da ISO-Latin-1 scheint nicht, von Ihrem Test zu arbeiten, können Sie versuchen, kCFStringEncodingISOLatin1 durch kCFStringEncodingUTF8 zu ersetzen.

+0

Danke, aber es hat nicht funktioniert :( – BlackMouse

1

Try this:

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

Leider ist die stringByAddingPercentEscapesUsingEncoding Methode nicht alle Sonderzeichen richtig funktioniert kodieren.

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

EDIT:

Haben Sie

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

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

Notiere die NSISOLatin1StringEncoding statt NSUTF8StringEncoding

+0

Danke, aber es hat nicht funktioniert :( – BlackMouse

+0

Ich habe gerade die Antwort mit etwas anderem Sie können versuchen – Mutix

+0

Danke .. Ich habe es versucht, und immer noch die falsche URL: Images/jag% E4rdator.png (Wenn der Name jagärdator.png ist) – BlackMouse

0

versucht, die Sie interessieren

Um NSURL

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

Die stringURL die Zeichenfolge repräsentiert URL zu erstellen. Bei der Anmeldung, versuchen Sie diese

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

ich in dieser Ausgabe lief durch „% C3% 89% C3% 89“, die in einer URL Ee konvertiert ich zu laden versucht hat. Dies schien die URL in das gewünschte Format zu konvertieren, damit ich die Datei von der URL herunterladen konnte.

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