【问题标题】:NSURL URLWithString: is null with non-english accented charactersNSURL URLWithString: 为空,带有非英语重音字符
【发布时间】:2011-01-08 16:11:21
【问题描述】:

我有以下字符串...

NSString *googleSearchString = @"http://www.google.com/search?q=lyrics+%22Tænder+På+Dig%22+%22Jakob+Sveistrup%22";

请注意,它有一些重音字符。当我尝试将其转换为 url 时,返回的 url 为空...

[NSURL URLWithString:googleSearchString];

因此,除非字符串中有重音的非英语字符,否则 URL 正常工作。有关如何处理的任何帮助?

【问题讨论】:

    标签: cocoa special-characters nsurl


    【解决方案1】:

    您需要转义特殊字符才能使其正常工作。比如:

    [NSURL URLWithString:[googlSearchString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]];
    

    【讨论】:

    • 行得通!感谢您的回答。我刚刚也找到了 CFURLCreateStringByAddingPercentEscapes() 函数,所以两者都可以完成这项工作。
    • 值得注意的是,这肯定会处理你的外来字符,但它不能正确处理像+或/这样的非字母字符。 NSString 没有任何内置函数可以真正正确地进行 URL 编码,但是这个函数适用于扩展字符。
    • 问题:对于 web url... 你应该使用 NSASCIIStringEncoding 还是 NSUTF8StringEncoding
    • 使用NSUTF8StringEncoding。编码确定百分比转义将描述哪些字节。 如果您使用 ASCII,则不能保证重音字符可以保留,或者如果可以,则不能保证以任何特定编码进行编码,因为这些字符不是 ASCII。此外,如果任何字符不是 Cocoa 使用的任何编码(例如几乎任何亚洲语言的任何字符),该方法仍将返回 nil
    • 在示例中,OP 有一个已经被百分比转义的字符串,这不会双重转义 %22 使 url 不再指向同一个地方吗?
    【解决方案2】:

    将此用于 SWIFT 4:

    let url = myURLString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
    let myURL = URL(string: url)
    

    【讨论】:

      【解决方案3】:

      使用 Swift 2.2

      为了转义非英语字符,例如:发出一个URL请求

      let urlPath = path.URLString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())

      这里urlPathOptionalpath 是您的原始网址(带有非英文字符的网址)

      【讨论】:

        【解决方案4】:

        在 2k16 方法中,stringByAddingPercentEscapesUsingEncoding: 已被弃用,并且无法正确转义。预定义 URL 时,只需使用浏览器编码的字符串,因为 stringByAddingPercentEncodingWithAllowedCharacters: 方法无法转义整个 URL。

        【讨论】:

          【解决方案5】:

          有时 url 中的空格会导致此问题。

          【讨论】:

            猜你喜欢
            • 2012-03-12
            • 1970-01-01
            • 1970-01-01
            • 2015-07-30
            • 1970-01-01
            • 1970-01-01
            • 2010-10-26
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多