【问题标题】:NSURL encoding with special characters带有特殊字符的 NSURL 编码
【发布时间】:2014-05-11 00:53:36
【问题描述】:

我正在尝试使用 NSURL 向以下内容提交请求:

http://api.allsaints.com/v1/product/?category=Women的针织衫

当将此 URL 放入带有 ' 和空格的浏览器中时,浏览器 (chrome) 正在将请求修改为:

http://api.allsaints.com/v1/product/?category=Women%27s%20Knitwear 有效。

但是,我无法获得正确的编码来作为 iOS 上的 NSURL 和 NSDATA 请求的一部分。我使用 stringByAddingPercentEscapesUsingEncoding 尝试了各种编码来规范化 URL,但它一直失败。

有人能指出正确的编码方向吗?不仅将空间交换为 %20,而且将 ' 交换为 %27?

【问题讨论】:

    标签: ios encoding nsurl


    【解决方案1】:

    参考 NSString stringByAddingPercentEscapesUsingEncoding: 你应该使用 CFURLCreateStringByAddingPercentEscapes 来自定义你想转义的字符。

    - (NSString *) urlencodeStr:(NSString *)str
    {
        return (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(
                                                                                     NULL,
                                                                                     (__bridge CFStringRef) str,
                                                                                     NULL,
                                                                                     CFSTR("!*'();:@+$,/?%#[]"),
                                                                                     kCFStringEncodingUTF8));
    }
    

    CFSTR("!*'();:@+$,/?%#[]") 包含的字符将被转义。

    【讨论】:

    • +1 顺便说一句,在CFURLCreateStringByAddingPercentEscapes 的第四个参数中包含&= 很重要。另外,顺便说一句,%#[] 字符是不必要的,因为无论如何CFURLCreateStringByAddingPercentEscapes 都会逃脱它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    相关资源
    最近更新 更多