解码URLEncoded非标准字符

时间:2012-04-04 15:18:51

标签: iphone objective-c ios urlencode

我正在尝试解码从URLEncoded服务器发送的一些文本,这是我设法找到的最佳方法。

我将这些标准函数用于URLEncododing:

NSString* encodeToPercentEscapeString(NSString *string) {
    return (__bridge NSString *)
    CFURLCreateStringByAddingPercentEscapes(NULL,
                                        (__bridge CFStringRef) string,
                                        NULL,
                                        (CFStringRef) @"!*'();:@&=+$,/?%#[]",
                                        kCFStringEncodingUTF8);
}

NSString* decodeFromPercentEscapeString(NSString *string) {
    return (__bridge NSString *)
    CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL,
                                                        (__bridge CFStringRef) string,
                                                        CFSTR(""),
                                                        kCFStringEncodingUTF8);
}

如果我编码特殊字符:

NSString* encoded = encodeToPercentEscapeString(@"ąśżźćęółń");

我得到@“%C4%85%C5%9B%C5%BC%C5%BA%C4%87%C4%99%C3%B3%C5%82%C5%84”

没关系。

但如果我尝试解码它:

NSString* original = decodeFromPercentEscapeString(encoded);

我得到:@“ÖÖŇõŇľŇļńáńô√≥ŇāŇĄ”。

为什么?

有没有更好的方法来解码URLEncoded文本?

1 个答案:

答案 0 :(得分:1)

您是否尝试过-[NSString stringByReplacingPercentEscapesUsingEncoding:]

此外,您正在错误地使用桥接演员表。创建的字符串将泄漏,因为ARC不知道它拥有它们。使用CFBridgingRelease()。这很好,因为它是CFRelease()的变体,通常需要平衡Core Foundation“Create”功能,但它与ARC合作。