如何制作包含|的NSURL (管道人物)?

aks*_*aks 19 iphone nsurl

我正试图从我的iPhone应用程序访问谷歌地图的前向地理编码服务.当我尝试从一个带有管道的字符串中创建一个NSURL时,我只得到一个nil指针.

NSURL *searchURL = [NSURL URLWithString:@"http://maps.google.com/maps/api/geocode/json?address=6th+and+pine&bounds=37.331689,-122.030731|37.331689,-122.030731&sensor=false"];
Run Code Online (Sandbox Code Playgroud)

我没有在google api中看到任何其他方式通过管道发送边界坐标.有关如何做到这一点的任何想法?

Ben*_*n S 32

您是否尝试使用%7C(char的URL编码值|)替换管道?

  • 不是NSString有一个 - stringByAddingPercentEscapesUsingEncoding:方法为你做到这一点? (4认同)

Flo*_*s M 16

由于stringByAddingPercentEscapesUsingEncoding已被弃用,你应该使用stringByAddingPercentEncodingWithAllowedCharacters.

快速回答:

let rawUrlStr = "http://maps.google.com/maps/api/geocode/json?address=6th+and+pine&bounds=37.331689,-122.030731|37.331689,-122.030731&sensor=false";
let urlEncoded = rawUrlStr.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())
let url = NSURL(string: urlEncoded)
Run Code Online (Sandbox Code Playgroud)

编辑:Swift 3回答:

let rawUrlStr = "http://maps.google.com/maps/api/geocode/json?address=6th+and+pine&bounds=37.331689,-122.030731|37.331689,-122.030731&sensor=false";
if let urlEncoded = rawUrlStr.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) {
    let url = NSURL(string: urlEncoded)
}
Run Code Online (Sandbox Code Playgroud)


Avi*_*oss 9

如果您希望将来放置任何奇怪的字符,请使用stringByAddingPercentEscapesUsingEncoding方法将字符串设置为"URL-Friendly"...

NSString *rawUrlStr = @"http://maps.google.com/maps/api/geocode/json?address=6th+and+pine&bounds=37.331689,-122.030731|37.331689,-122.030731&sensor=false";
NSString *urlStr = [rawUrlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *searchURL = [NSURL URLWithString:urlStr];
Run Code Online (Sandbox Code Playgroud)