问题
I am trying to access google maps' forward geocoding service from my iphone app. When i try to make an NSURL from a string with a pipe in it I just get a nil pointer.
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"];
I dont see any other way in the google api to send bounds coordinates with out a pipe. Any ideas about how I can do this?
回答1:
Have you tried replacing the pipe with %7C
(the URL encoded value for the char |
)?
回答2:
As stringByAddingPercentEscapesUsingEncoding
is deprecated, you should use stringByAddingPercentEncodingWithAllowedCharacters
.
Swift answer:
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)
Edit: Swift 3 answer:
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)
}
回答3:
If you want to be safe for whatever weird characters you will put in the future, use stringByAddingPercentEscapesUsingEncoding
method to make the string "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];
来源:https://stackoverflow.com/questions/3040632/how-to-make-an-nsurl-that-contains-a-pipe-character