2010-11-10 82 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); 
}