2010-11-10 83 views
7

我怎麼編碼這個URL顯示在一個UIWebView:NSURL有特殊字符

http://de.wikipedia.org/?search=Bevölkerungsentwicklung

我想:

-stringByAddingPercentEscapesUsingEncoding:NSUnicodeStringEncoding 
-stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding 

CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, 
             (CFStringRef)mobileUrl, 
             NULL, 
             (CFStringRef)@"!*'();:@&=+$,/?%#[]", 
             kCFStringEncodingUTF8); 

感謝

約爾格

回答

7

編碼只是URL字符串的搜索部分:

// searchString is the unescaped search string, e.g., "Bevölkerungsentwicklung" 

NSString *encodedSearchString = [searchString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSString *urlString = [NSString stringWithFormat:@"http://de.wikipedia.org/?search=%@", encodedSearchString]; 
NSURL *url = [NSURL URLWithString:urlString]; 

(還要注意,NSUTF8StringEncoding是所使用的編碼)

+1

確定這可能是一個辦法,但我不知道該URL總是會這樣。也可能是: http://de.wikipedia.org/wiki/Bevölkerungsentwicklung – Joerg 2010-11-11 14:55:10

+0

@Joerg:對不起;我假定搜索詞是用戶輸入的。 :S – Wevah 2010-11-11 15:55:46

+0

'stringByAddingPercentEscapesUsingEncoding'已棄用:改爲使用'stringByAddingPercentEncodingWithAllowedCharacters(_ :)',它總是使用推薦的UTF-8編碼,並且針對特定的URL組件或子組件編碼,因爲每個URL組件或子組件對於字符是有效的。 – 2015-12-06 08:22:20

2

只要使用以下示例代碼;


NSString *urlstring = [NSString stringWithFormat:@"http://de.wikipedia.org/?search=%@", searchString]; 
NSString *encodedString = [urlstring stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
NSURL *url = [NSURL URLWithString:encodedString]; 
+1

嗯是的,但我正在尋找更多的解決方案來編碼任何網址。它也可以是: http://de.wikipedia.org/wiki/Bevölkerungsentwicklung – Joerg 2010-11-11 14:57:41

1

我發現對於一些北歐字符,NSISOLatin1StringEncoding更合適。 這一次給了我一個更好的結果

- (void) testEncoding { 
    NSString * urlString = @"http://example/path/fileName_blå.pdf"; 
    urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSISOLatin1StringEncoding]; 
    NSURL * url = [NSURL URLWithString:urlString]; 
    NSLog(@"URL: %@", url); 
}