Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.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 objective-c中的url解码_Iphone_Objective C - Fatal编程技术网

Iphone objective-c中的url解码

Iphone objective-c中的url解码,iphone,objective-c,Iphone,Objective C,我正在处理objective-c中的URL编码字符串。是否有一个基础函数实际上反转URLCONDUCTION? 接收到的字符串类似于:K%FChlschrank,但应该在解码Kühlschrank之后我相信这就是您要寻找的: - (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)encoding 返回值: 一个新的字符串,通过在接收方中用给定编码确定的匹配字符替换所有百分比转义而生成。如果无法进

我正在处理objective-c中的URL编码字符串。是否有一个基础函数实际上反转URLCONDUCTION?
接收到的字符串类似于:K%FChlschrank,但应该在解码Kühlschrank之后

我相信这就是您要寻找的:

- (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)encoding
返回值:

一个新的字符串,通过在接收方中用给定编码确定的匹配字符替换所有百分比转义而生成。如果无法进行转换,则返回
nil
,例如,百分比转义给出了编码中不合法的字节序列

[source: Apple NSString Class Reference]

我创建了一个快速分类来帮助解决此问题:)

一旦定义,它可以快速处理编码字符串:

NSString *decodedString = [myString stringByDecodingURLFormat];
还有很多其他实现方法。

根据,URL只能使用ASCII字符集通过互联网发送。对我来说,这段代码有效:

NSString *original = @"K%FChlschrank";

NSString *result2 = [original stringByReplacingPercentEscapesUsingEncoding:NSASCIIStringEncoding];

就是这样

对于iOS 9上的parmanent解决方案,请使用空闲代码

NSURL* link = [NSURL URLWithString:[url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]];

苹果公司已弃用了
stringbyreplacingpercentescapesusingencode:
自从9月以来。请使用
stringByRemovingPercentEncoding

新方法通过将所有百分比编码序列替换为匹配的UTF-8字符,返回从接收器生成的新字符串

例如:

NSString *encodedLink = @"hello%20world";
NSString *decodedUrl = [encodedLink stringByRemovingPercentEncoding];
NSLog (@"%@", decodedUrl);
输出:

hello world

我应该传递什么编码作为参数?尝试了NSUTF8StringEncoding alreadyum,我不知道这实际上是什么编码,但文档中有一个很长的列表。好的,我收到了来自NSURLRequest的响应。下一行修复了这个问题:NSString*deviceName=[[[NSString alloc]initWithData:returnData编码:NSUTF8StringEncoding]stringByReplacingPercentEscapesUsingEncoding:NSISOlatin1StringCodeing];在执行URL解码步骤时,您应该使用NSUTF8StringEncoding,因为编码的字节是UTF8格式的,如果它们遵循任何最新的规范(我手头没有)。在进行百分比转义替换之前,您还需要将“+”替换为“”(空格)。我相信NSString结果实际上应该是NSString*result。太好了。你如何改变&;进入&尽管?或&rquote;进入“.和它们所有的类型?好问题…我会调查:)我写了一个类似的类别,但在我试图解码字符串时遇到了一个问题@“abcjhjhdfjhafjakhfjaklfj12346890(*^$#@@@@@$%^^……”,如果此方法返回零,则此方法看起来stringByReplacingPercentEscapesUsingEncoding会导致一些问题,因为”如果转换不可能,则返回nil(即,转义百分比给出的字节序列在给定编码中不合法)。“(来自NSURL.h)。因此,请注意那些遇到此问题的人。答案很好,与我们得到的问题相同。谢谢。您的答案是对字符串进行编码,但我们需要一个来解码字符串。但这不会将+符号转换为“" spaces@veereshkumbar-这不是真的,应该对
encodedLink
变量进行编码。例如
hello world
应该编码为
hello%20world
。在这种情况下,当您将
hello%20world
作为encodedLink时,
decodedur
变量将是
hello world
NSString *encodedLink = @"hello%20world";
NSString *decodedUrl = [encodedLink stringByRemovingPercentEncoding];
NSLog (@"%@", decodedUrl);
hello world