Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
Cocoa NSURL URLWithString:为空,带有非英语重音字符_Cocoa_Special Characters_Nsurl - Fatal编程技术网

Cocoa NSURL URLWithString:为空,带有非英语重音字符

Cocoa NSURL URLWithString:为空,带有非英语重音字符,cocoa,special-characters,nsurl,Cocoa,Special Characters,Nsurl,我有以下字符串 NSString *googleSearchString = @"http://www.google.com/search?q=lyrics+%22Tænder+På+Dig%22+%22Jakob+Sveistrup%22"; 请注意,它有一些重音字符。当我尝试将其转换为url时,返回的url为空 [NSURL URLWithString:googleSearchString]; 因此,通常url是有效的,除非字符串中有重音非英语字符。有关于如何处理该问题的帮助吗?您需要转

我有以下字符串

NSString *googleSearchString = @"http://www.google.com/search?q=lyrics+%22Tænder+På+Dig%22+%22Jakob+Sveistrup%22";
请注意,它有一些重音字符。当我尝试将其转换为url时,返回的url为空

[NSURL URLWithString:googleSearchString];

因此,通常url是有效的,除非字符串中有重音非英语字符。有关于如何处理该问题的帮助吗?

您需要转义特殊字符以使其正常工作。比如:

[NSURL URLWithString:[googlSearchString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]];

有时url中的空格会导致此问题

使用Swift 2.2

对于转义非英语字符,例如:要发出URL请求,请执行以下操作:

让urlPath=path.URLString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())


这里的
urlPath
是一个
可选的
path
是您的原始url(带有非英语字符的)

在2k16方法
stringByAddingPercentEscapesUsingEncoding:
中不推荐使用,无法正确转义。在预定义URL时,只需使用浏览器编码的字符串,因为
stringByAddingPercentEncodingWithAllowedCharacters:
方法无法转义整个URL。

将此用于SWIFT4:

let url = myURLString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
let myURL = URL(string: url)

真管用!谢谢你的回答。我刚刚找到了CFURLCreateStringByAddingPercentEscapes()函数,因此这两个函数都可以完成这项工作。值得注意的是,这肯定会处理外来字符,但不会正确处理+或/等非字母字符。NSString没有任何内置的函数能够正确地进行URL编码,但这个函数适用于扩展字符。。。您应该使用NSASCIIStringEncoding还是NSUTF8StringEncoding使用
NSUTF8StringEncoding
。编码确定转义百分比将描述哪些字节。如果您使用ASCII,则重音字符不能保证存在,或者,如果存在,则不能保证以任何特定编码进行编码,因为这些字符不是ASCII格式。此外,如果任何字符不是Cocoa赋予您的任何编码(例如几乎任何亚洲语言中的任何字符),该方法仍将返回
nil
。在本例中,OP有一个已转义百分比的字符串,这不会双重转义%22,使url不再指向同一位置吗?