Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 非标准编码字符的解码_Iphone_Objective C_Ios_Urlencode - Fatal编程技术网

Iphone 非标准编码字符的解码

Iphone 非标准编码字符的解码,iphone,objective-c,ios,urlencode,Iphone,Objective C,Ios,Urlencode,我正在尝试解码从URL编码的服务器发送的一些文本,这是我找到的最好的方法 我使用以下标准函数进行URL编码: NSString* encodeToPercentEscapeString(NSString *string) { return (__bridge NSString *) CFURLCreateStringByAddingPercentEscapes(NULL, (__bridge CFSt

我正在尝试解码从URL编码的服务器发送的一些文本,这是我找到的最好的方法

我使用以下标准函数进行URL编码:

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);
我得到:@“徖徖徖徖徖徖徖徖徖徖徖徖徖徖√≥ŇŇĄ”

为什么?


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

您是否尝试过
-[NSString stringByReplacingPercentEscapesUsingEncoding:


此外,您正在错误地使用桥接强制转换。创建的字符串将泄漏,因为ARC不知道它拥有这些字符串。使用CfBrigingRelease()。这是很好的,因为它是CfReLasee()的一个变体,它通常需要平衡一个核心基础“创建”函数,但是它与ARC协作。p> 您是否尝试过
-[NSString stringByReplacingPercentEscapesUsingEncoding:][/code>


此外,您正在错误地使用桥接强制转换。创建的字符串将泄漏,因为ARC不知道它拥有这些字符串。使用CfBrigingRelease()。这是很好的,因为它是CfReLasee()的一个变体,它通常需要平衡一个核心基础“创建”函数,但是它与ARC协作。p> 是的,我有。同样的事情也会发生。不过,谢谢你给我关于桥的提示。我想肯定还有其他问题。Python中的快速测试(仅使用编码字符串)显示了正确的输出:$Python>>>来自CoreFoundation import*>>>cfurlCreateStringByReplacingPercentesEscapesusingEncoding(无,u”%C4%85%C5%9B%C5%BC%C5%BA%C4%87%C4%99%C3%B3%C5%82%C5%84“,u”,kCFStringEncodingUTF8)。编码('utf8')“\xc4\x85\xc5\x9b\xc5\xbc\xc5\xba\xc4\x87\xc4\x99\xc3\xb3\xc5\x82\xc5\x84”是的,但由于某些原因,似乎应该作为一个字符处理的字节对被视为两个。这意味着在您的问题中\xc4\x85翻译为Ö而不是ą,您可以用“我得到”来描述结果。你怎么知道的?我只是拿了你的代码并进行了测试,一切都很好。我使用
NSLog()
检查结果。我删除了ARC isms,因为我在Snow Leopard上使用了Xcode 3.2.6,但仅此而已。我也使用了NSLog,但在Xcode 4.3.2和Lion上使用了5.1。我开始认为这可能是我的ios/devtools版本中的一个bug。同样的事情也会发生。不过,谢谢你给我关于桥的提示。我想肯定还有其他问题。Python中的快速测试(仅使用编码字符串)显示了正确的输出:$Python>>>来自CoreFoundation import*>>>cfurlCreateStringByReplacingPercentesEscapesusingEncoding(无,u”%C4%85%C5%9B%C5%BC%C5%BA%C4%87%C4%99%C3%B3%C5%82%C5%84“,u”,kCFStringEncodingUTF8)。编码('utf8')“\xc4\x85\xc5\x9b\xc5\xbc\xc5\xba\xc4\x87\xc4\x99\xc3\xb3\xc5\x82\xc5\x84”是的,但由于某些原因,似乎应该作为一个字符处理的字节对被视为两个。这意味着在您的问题中\xc4\x85翻译为Ö而不是ą,您可以用“我得到”来描述结果。你怎么知道的?我只是拿了你的代码并进行了测试,一切都很好。我使用
NSLog()
检查结果。我删除了ARC isms,因为我在Snow Leopard上使用了Xcode 3.2.6,但仅此而已。我也使用了NSLog,但在Xcode 4.3.2和Lion上使用了5.1。我开始认为这可能是我的ios/devtools版本中的一个bug。