1

我正在尝试解码从 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 文本?

4

1 回答 1

1

你试过-[NSString stringByReplacingPercentEscapesUsingEncoding:]吗?

此外,您使用的桥接演员阵容不正确。创建的字符串会泄漏,因为 ARC 不知道它拥有它们。使用 CFBridgingRelease()。这很好,因为它是 CFRelease() 的变体,通常是平衡核心基础“创建”功能所必需的,但它与 ARC 合作。

于 2012-04-04T15:47:42.370 回答