【问题标题】:NSURL with special characters带有特殊字符的 NSURL
【发布时间】:2010-11-10 15:07:03
【问题描述】:

如何编码这个 url 以显示在 UIWebview 中:

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

我试过了:

-stringByAddingPercentEscapesUsingEncoding:NSUnicodeStringEncoding
-stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding

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

谢谢

乔尔格

【问题讨论】:

    标签: iphone objective-c ipad


    【解决方案1】:

    仅对 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 是使用的编码。)

    【讨论】:

    • 好的,这可能是一种方法,但我不确定 url 是否总是这样。也可以是:de.wikipedia.org/wiki/Bevölkerungsentwicklung
    • @Joerg:对不起;我假设搜索词是用户输入的。 :S
    • stringByAddingPercentEscapesUsingEncoding 已弃用:改用 stringByAddingPercentEncodingWithAllowedCharacters(_:),它始终使用推荐的 UTF-8 编码,并为特定的 URL 组件或子组件编码,因为每个 URL 组件或子组件都有不同的规则哪些字符是有效的。
    • 回答此问题时,该方法不存在,但现在是正确的。
    【解决方案2】:

    只需使用下面的示例代码;

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

    【讨论】:

    【解决方案3】:

    我还发现对于一些北欧字符,NSISOLatin1StringEncoding 更适合。 这个给了我更好的结果

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2012-10-06
      • 2018-11-14
      相关资源
      最近更新 更多