我正在尝试解码从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文本?
答案 0 :(得分:1)
您是否尝试过-[NSString stringByReplacingPercentEscapesUsingEncoding:]
?
此外,您正在错误地使用桥接演员表。创建的字符串将泄漏,因为ARC不知道它拥有它们。使用CFBridgingRelease()。这很好,因为它是CFRelease()的变体,通常需要平衡Core Foundation“Create”功能,但它与ARC合作。